這將是一套完整詳細且持續(xù)更新的、長期維護的 原創(chuàng) Flink系列教程、文檔,其中會包含各種商用實例詳解、Flink源碼講解、機制剖析、周邊組件講解等,旨在幫助開發(fā)者快速融入Flink開發(fā),或作為工具文檔參閱。也希望更多的開發(fā)者可以參與到大數(shù)據(jù)相關(guān)的技術(shù)討論中來,共同商討疑難雜癥,豐富社區(qū)?!M際
本文標(biāo)題: 如何實現(xiàn) Flink 服務(wù)的高可用
文章作者: 盡際
發(fā)布時間: 2019年08月06日 - 23:38:30
最后更新: 2019年08月06日 - 23:38:30
原始鏈接:
許可協(xié)議: 署名-非商業(yè)性使用-禁止演繹 4.0 國際 轉(zhuǎn)載請保留原文鏈接及作者。
四、Flink 服務(wù)的高可用
在幾乎所有的分布式服務(wù)中,服務(wù)大體上都會分為兩種角色:主服務(wù)、從服務(wù)。例如:HDFS 中的 NameNode 與 DataNode;YARN 中的 Resourcemanager 與 NodeManager;Flink 中的 JobManager 與 TaskManager。
主服務(wù) 一般情況下會協(xié)調(diào)、管理、控制著整個分布式服務(wù)的運行。對于 Flink 而言,JobManager 負責(zé)作業(yè)調(diào)度、資源管理,如果該服務(wù)異常下線,則會導(dǎo)致整個 Flink 分布式服務(wù)崩潰。對于單臺 JobManager 服務(wù)而言(單點故障)還是存在較大風(fēng)的。因此,本節(jié)主要講述如何部署Flink JobManager服務(wù)的高可用。
4.1 基于 Standalone 模式配置 Flink 高可用
4.1.1 高可用說明
在 Standalone 模式下,可以同時在多臺節(jié)點上開啟 JobManager 服務(wù),并將狀態(tài)注冊到 Zookeeper,保證整個 Flink 集群中同一時間只有一個 JobManager 處于 Leader 狀態(tài),負責(zé)與客戶端交互,并控制集群中的 TaskManager 服務(wù),其他 JobManager 處于 Standby 狀態(tài)。
當(dāng)處于 Leader 狀態(tài)的 JobManager 異常崩潰時,F(xiàn)link 集群中另外某一個 JobManager 會從 Standby 狀態(tài)切換為 Leader 狀態(tài),接手集群的維護和管理。此時,即使剛才崩潰的 JobManager 從故障中恢復(fù),不會再次立即擔(dān)任 Leader,而是變?yōu)?Standby 狀態(tài)。
4.1.2 部署高可用
-
修改配置文件
-
修改 Flink conf 目錄下的 masters 文件,內(nèi)容如下:
linux01:8081 linux02:8081 -
修改Flink conf 目錄下的 flink-conf.yaml 文件,內(nèi)容如下:
# 指定高可用模式為:Zookeeper。 high-availability: zookeeper # 指定 Zookeeper 節(jié)點地址,多個地址用逗號分隔。 high-availability.zookeeper.quorum: linux01:2181,linux02:2181,linux03:2181 # 設(shè)置 JobManager 注冊到 Zookeeper 中的目錄(掛載點目錄), # 注意:如果當(dāng)前所有機器節(jié)點中存在多個 Standalone 模式的高可用集群,則應(yīng)該有不同的掛載點目錄。 high-availability.zookeeper.path.root: /flink # 指定當(dāng)前高可用集群的唯一ID(如果當(dāng)前所有機器節(jié)點中存在多個 Standalone 模式的高可用集群), # 注意,在 YARN 模式下不要設(shè)置此值,YARN 每次會自動生成 Cluster-id。 high-availability.cluster-id: /flink_ns01 # 設(shè)置高可用數(shù)據(jù)的存儲位置,Zookeeper中只存儲元數(shù)據(jù)信息。 high-availability.storageDir: hdfs://linux01:8020/flink/recovery -
分發(fā)配置
分發(fā)上述修改后的配置文件到其他機器節(jié)點,命令如下:
$ pwd /home/admin/modules/flink-1.8.1 $ scp -r conf/ linux02:/home/admin/modules/flink-1.8.1/ $ scp -r conf/ linux03:/home/admin/modules/flink-1.8.1/
-
-
啟動服務(wù)
最后,通過腳本啟動 Flink 服務(wù)即可,命令如下:
$ bin/start-cluster.sh Starting HA cluster with 2 masters. Starting standalonesession daemon on host linux01. Starting standalonesession daemon on host linux02. Starting taskexecutor daemon on host linux02. Starting taskexecutor daemon on host linux03.
4.2 基于 YARN 模式配置 Flink 高可用
4.2.1 高可用說明
基于 YARN 模式部署 JobManager 的高可用(Flink Session方式),不會提前開啟多個 JobManager,而是只開啟 1 個,當(dāng)這個 JobManager 在 YARN 中發(fā)生異常時,YARN 會嘗試在不同的 NodeManager 節(jié)點中重啟一個新的 JobManager。
在此過程中,需要在 YARN 中配置 Application Master 的重啟次數(shù),并在 Flink 的配置文件中,指定 JobManager 重啟嘗試的次數(shù)。
接下來,我們進行高可用的部署。
4.2.2 部署高可用
-
修改配置文件
-
修改 yarn-site.xml 配置文件
設(shè)置 Application Master 的重試次數(shù),添加如下內(nèi)容:
<property> <name>yarn.resourcemanager.am.max-attempts</name> <value>6</value> <description> The maximum number of application master execution attempts. </description> </property>如果上數(shù)值設(shè)置為 2,則意味著允許 Application Master 單點故障。
-
修改 Flink 的 flink-conf.yaml 文件
重新修改 flink-conf.yaml 高可用部分的內(nèi)容如下:
high-availability: zookeeper high-availability.zookeeper.quorum: linux01:2181,linux02:2181,linux03:2181 high-availability.storageDir: hdfs://linux01:8020/flink/recovery high-availability.zookeeper.path.root: /flink yarn.application-attempts: 4 -
分發(fā) Flink 和 YARN 的配置文件到其他節(jié)點
$ pwd /home/admin/modules/flink-1.8.1 $ scp -r conf/ linux02:/home/admin/modules/flink-1.8.1/ $ scp -r conf/ linux03:/home/admin/modules/flink-1.8.1/ $ scp /home/admin/modules/hadoop-2.7.2/etc/hadoop/yarn-site.xml linux02:/home/admin/modules/hadoop-2.7.2/etc/hadoop/ $ scp /home/admin/modules/hadoop-2.7.2/etc/hadoop/yarn-site.xml linux03:/home/admin/modules/hadoop-2.7.2/etc/hadoop/
-
-
啟動服務(wù)
最后,通過腳本啟動 Flink Session 服務(wù)即可,命令如下:
$ bin/yarn-session.sh -n 2