10-Flink集群的高可用(搭建篇补充)
戳更多文章:
1-Flink入門
2-本地環(huán)境搭建&構(gòu)建第一個(gè)Flink應(yīng)用
3-DataSet API
4-DataSteam API
5-集群部署
6-分布式緩存
7-重啟策略
8-Flink中的窗口
9-Flink中的Time
Flink時(shí)間戳和水印
Broadcast廣播變量
FlinkTable&SQL
Flink實(shí)戰(zhàn)項(xiàng)目實(shí)時(shí)熱銷排行
Flink寫入RedisSink
17-Flink消費(fèi)Kafka寫入Mysql
Flink的HA搭建并不復(fù)雜,本質(zhì)來說就是配置2個(gè)jobmanager。
本文作為Flink集群部署的補(bǔ)充篇。
這篇文章來自網(wǎng)絡(luò),向作者尼小摩致敬,
概述
JobManager 協(xié)調(diào)每個(gè) Flink 部署。它負(fù)責(zé)調(diào)度和資源管理。
默認(rèn)情況下,每個(gè) Flink 集群只有一個(gè) JobManager 實(shí)例。 這會產(chǎn)生單點(diǎn)故障(SPOF):如果 JobManager 崩潰,則無法提交新作業(yè)并且導(dǎo)致運(yùn)行中的作業(yè)運(yùn)行失敗。
使用 JobManager 高可用性模式,可以避免這個(gè)問題,從而消除 SPOF。您可以為Standalone和 YARN 集群配置高可用性。
Standalone集群高可用性
針對 Standalone 集群的 JobManager 高可用性的一般概念是,任何時(shí)候都有一個(gè) 主 JobManager 和多個(gè)備 JobManagers,以便在主節(jié)點(diǎn)失敗時(shí)有備 JobManagers 來接管集群。這保證了沒有單點(diǎn)故障,一旦備 JobManager 接管集群,作業(yè)就可以正常運(yùn)行。主備 JobManager 實(shí)例之間沒有明顯的區(qū)別。每個(gè) JobManager 都可以充當(dāng)主備節(jié)點(diǎn)。
例如,請考慮以下三個(gè) JobManager 實(shí)例的設(shè)置:
配置
要啟用 JobManager 高可用性,您必須將高可用性模式設(shè)置為 zookeeper,配置 zookeeper quorum 將所有 JobManager 主機(jī)及其 web UI 端口寫入配置文件。
Flink利用 ZooKeeper 在所有正在運(yùn)行的 JobManager 實(shí)例之間進(jìn)行分布式協(xié)調(diào)。 ZooKeeper 是獨(dú)立于 Flink 的服務(wù),通過 Leader 選舉和輕量級一致狀態(tài)存儲提供高可靠的分布式協(xié)調(diào)。
Masters文件 (masters服務(wù)器)
要啟動HA集群,請?jiān)谝韵挛恢门渲肕aster文件
- conf/masters:masters文件:masters文件包含啟動 jobmanager 的所有主機(jī)和 web 用戶界面綁定的端口。
默認(rèn)情況下,job manager選一個(gè)隨機(jī)端口作為進(jìn)程隨機(jī)通信端口。您可以通過 high-availability.jobmanager.port 鍵修改此設(shè)置。此配置接受單個(gè)端口(例如50010),范圍(50000-50025)或兩者的組合(50010,50011,50020-50025,50050-50075)。
配置文件(flink-conf.yaml)
要啟動HA集群,請將以下配置鍵添加到 conf/flink-conf.yaml:
- 高可用性模式(必需):在 conf/flink-conf.yaml 中,必須將高可用性模式設(shè)置為zookeeper,以打開高可用模式。或者將此選項(xiàng)設(shè)置為工廠類的 FQN,Flink 通過創(chuàng)建 HighAvailabilityServices 實(shí)例使用。
- Zookeeper quorum(必需): ZooKeeper quorum 是 ZooKeeper 服務(wù)器的復(fù)制組,它提供分布式協(xié)調(diào)服務(wù)。
每個(gè) addressX:port 都是一個(gè) ZooKeeper 服務(wù)器的ip及其端口,Flink 可以在指定的地址和端口訪問zookeeper。
- ZooKeeper root (推薦): ZooKeeper 根節(jié)點(diǎn),在該節(jié)點(diǎn)下放置所有集群節(jié)點(diǎn)。
- ZooKeeper cluster-id(推薦): ZooKeeper的cluster-id節(jié)點(diǎn),在該節(jié)點(diǎn)下放置集群的所有相關(guān)數(shù)據(jù)。
重要:?在運(yùn)行 YARN 或其他群集管理器中運(yùn)行時(shí),不要手動設(shè)置此值。在這些情況下,將根據(jù)應(yīng)用程序 ID 自動生成 cluster-id。 手動設(shè)置 cluster-id 會覆蓋 YARN 中的自動生成的 ID。反過來,使用 -z CLI 選項(xiàng)指定 cluster-id 會覆蓋手動配置。如果在裸機(jī)上運(yùn)行多個(gè) Flink HA 集群,則必須為每個(gè)集群手動配置單獨(dú)的 cluster-id。
- 存儲目錄(必需): JobManager 元數(shù)據(jù)保存在文件系統(tǒng) storageDir 中,在 ZooKeeper 中僅保存了指向此狀態(tài)的指針。
該storageDir 中保存了 JobManager 恢復(fù)狀態(tài)所需的所有元數(shù)據(jù)。
配置 master 文件和 ZooKeeper quorum 之后,您可以使用提供的集群啟動腳本。它們將啟動 HA 群集。請注意,啟動 Flink HA 集群前,必須啟動 Zookeeper 集群,并確保為要啟動的每個(gè) HA 群集配置單獨(dú)的 ZooKeeper 根路徑。
示例:具有2個(gè) JobManager 的 Standalone 集群
YARN 集群的高可用性
在運(yùn)行高可用性 YARN 集群時(shí),我們不會運(yùn)行多個(gè) JobManager (ApplicationMaster) 實(shí)例,而只運(yùn)行一個(gè),該JobManager實(shí)例失敗時(shí),YARN會將其重新啟動。Yarn的具體行為取決于您使用的 YARN 版本。
配置
Application Master最大重試次數(shù)(yarn-site.xml)
在YARN 配置文件 yarn-site.xml 中,需要配置 application master 的最大重試次數(shù):
當(dāng)前 YARN 版本的默認(rèn)值是2(表示允許單個(gè)JobManager失敗兩次)。
Application Attempts(flink-conf.yaml):
除了HA配置(參考上文)之外,您還必須配置最大重試次數(shù) conf/flink-conf.yaml:
這意味著在如果程序啟動失敗,YARN會再重試9次(9 次重試 + 1次啟動)。如果 YARN 操作需要,如果啟動10次作業(yè)還失敗,yarn才會將該任務(wù)的狀態(tài)置為失敗。如果搶占,節(jié)點(diǎn)硬件故障或重啟,NodeManager 重新同步等操作需要,YARN繼續(xù)嘗試啟動應(yīng)用。 這些重啟不計(jì)入 yarn.application-attempts 個(gè)數(shù)中。重要的是要注意 yarn.resourcemanager.am.max-attempts 為yarn中程序重啟上限。因此, Flink 中設(shè)置的程序嘗試次數(shù)不能超過 YARN 的集群設(shè)置。
示例:高可用的YARN Session
1.配置 HA 模式和 ZooKeeper 集群在 conf/flink-conf.yaml 中:
high-availability: zookeeperhigh-availability.zookeeper.quorum: localhost:2181high-availability.storageDir: hdfs:///flink/recoveryhigh-availability.zookeeper.path.root: /flinkyarn.application-attempts: 10配置 Zookeeper 安全性
如果 ZooKeeper 使用 Kerberos 以安全模式運(yùn)行,flink-conf.yaml 根據(jù)需要覆蓋以下配置:
zookeeper.sasl.service-name: zookeeper # 默認(rèn)設(shè)置是 “zookeeper” 。如果 ZooKeeper 集群配置了 # 不同的服務(wù)名稱,那么可以在這里提供。 zookeeper.sasl.login-context-name: Client # 默認(rèn)設(shè)置是 “Client”。該值配置需要匹配 # "security.kerberos.login.contexts"中的其中一個(gè)值。有關(guān) Kerberos 安全性的 Flink 配置的更多信息,請參閱 此處。您還可以在 此處 找到關(guān)于 Flink 內(nèi)部如何設(shè)置基于 kerberos 的安全性的詳細(xì)信息。
Bootstrap ZooKeeper
如果您沒有正在運(yùn)行的ZooKeeper,則可以使用Flink程序附帶的腳本。
這是一個(gè) ZooKeeper 配置模板 conf/zoo.cfg。您可以為主機(jī)配置為使用 server.X 條目運(yùn)行 ZooKeeper,其中 X 是每個(gè)服務(wù)器的唯一IP:
該腳本 bin/start-zookeeper-quorum.sh 將在每個(gè)配置的主機(jī)上啟動 ZooKeeper 服務(wù)器。 Flink wrapper 會啟動 ZooKeeper 服務(wù),該 wraper 從 conf/zoo.cfg 中讀取配置,并設(shè)置一些必需的配置項(xiàng)。在生產(chǎn)設(shè)置中,建議您使用自己安裝的 ZooKeeper。
轉(zhuǎn)載于:https://www.cnblogs.com/importbigdata/p/10779934.html
總結(jié)
以上是生活随笔為你收集整理的10-Flink集群的高可用(搭建篇补充)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python设计模式-观察者
- 下一篇: note 11 字典