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