2020-11.07-Flink-14(搭建Flink運行流式應用)

1.部署模式

獨立集群

獨立集群包含至少一個master進程,以及至少一個TaskManager進程,TaskManager進程運行在一臺或者多臺機器上。所有的進程都是JVM進程。下圖展示了獨立集群的部署。

獨立集群

master進程在不同的線程中運行了一個Dispatcher和一個ResourceManager。一旦它們開始運行,所有TaskManager都將在Resourcemanager中進行注冊。下圖展示了一個任務如何提交到一個獨立集群中去。


向獨立集群提交作業(yè)的過程

客戶端向Dispatcher提交了一個任務,Dispatcher將會啟動一個作業(yè)管理器線程,并提供執(zhí)行所需的JobGraph。作業(yè)管理器向ResourceManager請求必要的task slots。一旦請求的slots分配好,作業(yè)管理器就會部署job。

在standalone這種部署方式中,master和worker進程在失敗以后,并不會自動重啟。如果有足夠的slots可供使用,job是可以從一次worker失敗中恢復的。只要我們運行多個worker就好了。但如果job想從master失敗中恢復的話,則需要進行高可用(HA)的配置了。

Docker
Yarn
Flink的job如何提交到YARN集群
  1. 提交作業(yè)
  2. 啟動application master以及flink master
  3. 請求處理槽
  4. 啟動taskmanager
  5. 啟動taskmanager容器
  6. 注冊處理槽
  7. 請求處理槽
  8. 提供處理槽
  9. 執(zhí)行任務

當客戶端提交任務時,客戶端將建立和YARN ResourceManager的連接,然后啟動一個新的YARN應用的master進程,進程中包含一個作業(yè)管理器線程和一個ResourceManager。作業(yè)管理器向ResourceManager請求所需要的slots,用來運行Flink的job。接下來,F(xiàn)link的ResourceManager將向Yarn的ResourceManager請求容器,然后啟動TaskManager進程。一旦啟動,TaskManager會將slots注冊在Flink的ResourceManager中,F(xiàn)link的ResourceManager將把slots提供給作業(yè)管理器。最終,作業(yè)管理器把job的任務提交給TaskManager執(zhí)行。

當一個作業(yè)被提交運行,分發(fā)器將啟動一個作業(yè)管理器線程,這個線程將向Flink的資源管理器請求所需要的slots。如果沒有足夠的slots,F(xiàn)link的資源管理器將向YARN的資源管理器請求額外的容器,來啟動TaskManager進程,并在Flink的資源管理器中注冊。一旦所需slots可用,F(xiàn)link的資源管理器將把slots分配給作業(yè)管理器,然后開始執(zhí)行job。下圖展示了job如何在session模式下執(zhí)行。


job如何在session模式下執(zhí)行
K8S

2.高可用性設置

Flink的高可用配置需要Apache ZooKeeper組件,以及一個分布式文件系統(tǒng),例如HDFS等等。作業(yè)管理器將會把相關信息都存儲在文件系統(tǒng)中,并將指向文件系統(tǒng)中相關信息的指針保存在ZooKeeper中。一旦失敗,一個新的作業(yè)管理器將從ZooKeeper中指向相關信息的指針所指向的文件系統(tǒng)中讀取元數(shù)據(jù),并恢復運行。

在./conf/flink-conf.yaml編寫配置文件

high-availability.zookeeper.quorum: address1:2181[,...],addressX:2181
high-availability.storageDir: hdfs:///flink/recovery
high-availability.zookeeper.path.root: /flink
獨立集群高可用配置

對于Standalone集群模式下的JobManager高可用通常的方案是:Flink集群的任一時刻只有一個leading JobManager,并且有多個standby JobManager。當leader失敗后,standby通過選舉出一個JobManager作為新的leader。這個方案可以保證沒有單點故障的問題。對于standby和master JobManager實例來說,其實沒有明確的區(qū)別,每一個JobManager能夠當擔master或standby角色。

yarn集群高可用

當運行一個高可用YARN集群時,我們不需要運行多個JobManager(ApplicationMaster)實例,只需要運行一個實例,如果失敗了通過YARN來進行重啟

K8S的HA模式

3.集成HADOOP組件

  1. 下載包含hadoop的Flink版本。
  2. 使用我們之前下載的Flink,然后配置Hadoop的環(huán)境變量。 export HADOOP_CLASSPATH={hadoop classpath} 我們還需要提供Hadoop配置文件的路徑。只需設置名為HADOOP_CONF_DIR的環(huán)境變量就可以了。這樣Flink就能夠連上YARN的ResourceManager和HDFS了。

4.文件系統(tǒng)配置

5.系統(tǒng)配置

java和類加載

為了防止作業(yè)和Flink使用相同依賴而引起沖突,flink在默認情況下會先從用戶類加載器中查找用戶類,如果沒有發(fā)現(xiàn)再去父類加載器中查找,但是也可以使用classloader.resolve-order配置項反轉這一順序

CPU
內存和網(wǎng)絡緩沖

通常,主進程對于內存的要求并不苛刻,它的默認的JVM堆內存數(shù)量只有1GB,但是如果主進程需要管理很多個應用或者某個應用具有很多算子,可以就需要利用jobmanager.heap.size來配置項增加JVM堆的容量

磁盤存儲

確保臨時目錄不會被自動刪除

檢查點和狀態(tài)后端
安全系
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Flink運行架構主要涉及一下三個方面:1.Flink運行時的組件2.任務提交流程3.任務調度流程 1. Flin...
    勇于自信閱讀 1,646評論 0 0
  • Flink運行時的組件 Flink 運行時架構主要包括四個不同的組件,它們會在運行流處理應用程序時協(xié)同工作:作業(yè)管...
    IsComing乜邪閱讀 788評論 0 1
  • [TOC] flink是什么 Flink主頁在其頂部展示了該項目的理念:“Apache Flink是為分布式、高性...
    tracy_668閱讀 1,799評論 0 1
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,869評論 28 54
  • 信任包括信任自己和信任他人 很多時候,很多事情,失敗、遺憾、錯過,源于不自信,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,380評論 4 8

友情鏈接更多精彩內容