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

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

客戶端向Dispatcher提交了一個任務,Dispatcher將會啟動一個作業(yè)管理器線程,并提供執(zhí)行所需的JobGraph。作業(yè)管理器向ResourceManager請求必要的task slots。一旦請求的slots分配好,作業(yè)管理器就會部署job。
在standalone這種部署方式中,master和worker進程在失敗以后,并不會自動重啟。如果有足夠的slots可供使用,job是可以從一次worker失敗中恢復的。只要我們運行多個worker就好了。但如果job想從master失敗中恢復的話,則需要進行高可用(HA)的配置了。
Docker
Yarn

- 提交作業(yè)
- 啟動application master以及flink master
- 請求處理槽
- 啟動taskmanager
- 啟動taskmanager容器
- 注冊處理槽
- 請求處理槽
- 提供處理槽
- 執(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í)行。

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組件
- 下載包含hadoop的Flink版本。
- 使用我們之前下載的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堆的容量
磁盤存儲
確保臨時目錄不會被自動刪除