《從0到1學習Flink》—— Flink JobManager 高可用性配置

前言

以前在 《從0到1學習Flink》—— Flink 配置文件詳解 講過 Flink 的配置,可是後面陸續有人來問我一些配置相關的東西,在加上我如今對 Flink 也更熟悉了些,這裏我就再寫下 Flink JobManager 的配置相關信息。服務器

在 《從0到1學習Flink》—— Apache Flink 介紹 一文中介紹過了 Flink Job 的運行架構圖:session

JobManager 協調每一個 Flink 做業的部署。它負責調度和資源管理。架構

默認狀況下,每一個 Flink 集羣都有一個 JobManager 實例。這會產生單點故障(SPOF):若是 JobManager 崩潰,則沒法提交新做業且運行中的做業也會失敗。app

若是咱們使用 JobManager 高可用模式,能夠避免這個問題。您能夠爲 standalone 集羣和 YARN 集羣配置高可用模式。jsp

standalone 集羣高可用性

standalone 集羣的 JobManager 高可用性的概念是,任什麼時候候都有一個主 JobManager 和 多個備 JobManagers,以便在主節點失敗時有新的 JobNamager 接管集羣。這樣就保證了沒有單點故障,一旦備 JobManager 接管集羣,做業就能夠依舊正常運行。主備 JobManager 實例之間沒有明確的區別。每一個 JobManager 均可以充當主備節點。分佈式

例如,請考慮如下三個 JobManager 實例的設置:學習

如何配置

要啓用 JobManager 高可用性功能,您必須將高可用性模式設置爲 zookeeper,配置 ZooKeeper quorum,將全部 JobManagers 主機及其 Web UI 端口寫入配置文件。spa

Flink 利用 ZooKeeper 在全部正在運行的 JobManager 實例之間進行分佈式協調。ZooKeeper 是獨立於 Flink 的服務,經過 leader 選舉和輕量級一致性狀態存儲提供高可靠的分佈式協調服務。Flink 包含用於 Bootstrap ZooKeeper 安裝的腳本。
他在咱們的 Flink 安裝路徑下面 /conf/zoo.cfg 。指針

Masters 文件

要啓動 HA 集羣,請在如下位置配置 Masters 文件 conf/masters:server

1
2
localhost:8081
xxx.xxx.xxx.xxx:8081

masters 文件包含啓動 JobManagers 的全部主機以及 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,以打開高可用模式。

1
high-availability: zookeeper

ZooKeeper quorum(必需):ZooKeeper quorum 是一組 ZooKeeper 服務器,它提供分佈式協調服務。

1
high-availability.zookeeper.quorum: ip1:2181 [,...],ip2:2181

每一個 ip:port 都是一個 ZooKeeper 服務器的 ip 及其端口,Flink 能夠經過指定的地址和端口訪問 zookeeper。

另外就是高可用存儲目錄,JobManager 元數據保存在文件系統 storageDir 中,在 ZooKeeper 中僅保存了指向此狀態的指針, 推薦這個目錄是 HDFS, S3, Ceph, nfs 等,該 storageDir 中保存了 JobManager 恢復狀態須要的全部元數據。

1
high-availability.storageDir: hdfs:///flink/ha/

配置 master 文件和 ZooKeeper 配置後,您可使用提供的集羣啓動腳本。他們將啓動 HA 集羣。請注意,啓動 Flink HA 集羣前,必須啓動 Zookeeper 集羣,並確保爲要啓動的每一個 HA 集羣配置單獨的 ZooKeeper 根路徑。

示例

具備 2 個 JobManagers 的 Standalone 集羣:

一、在 conf/flink-conf.yaml 中配置高可用模式和 Zookeeper :

1
2
3
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.storageDir: hdfs:///flink/recovery

二、在 conf/masters 中 配置 masters:

1
2
localhost:8081
localhost:8082

三、在 conf/zoo.cfg 中配置 Zookeeper 服務:

1
server.0=localhost:2888:3888

四、啓動 ZooKeeper 集羣:

1
2
$ bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.

五、啓動一個 Flink HA 集羣:

1
2
3
4
5
$ bin/start-cluster.sh
Starting HA cluster with 2 masters and 1 peers in ZooKeeper quorum.
Starting jobmanager daemon on host localhost.
Starting jobmanager daemon on host localhost.
Starting taskmanager daemon on host localhost.

六、中止 ZooKeeper 和集羣:

1
2
3
4
5
6
7
$ bin/stop-cluster.sh
Stopping taskmanager daemon (pid: 7647) on localhost.
Stopping jobmanager daemon (pid: 7495) on host localhost.
Stopping jobmanager daemon (pid: 7349) on host localhost.

$ bin/stop-zookeeper-quorum.sh
Stopping zookeeper daemon (pid: 7101) on host localhost.

上面的執行腳本以下圖可見:

YARN 集羣高可用性

當運行高可用的 YARN 集羣時,咱們不會運行多個 JobManager 實例,而只會運行一個,該 JobManager 實例失敗時,YARN 會將其從新啓動。Yarn 的具體行爲取決於您使用的 YARN 版本。

如何配置?

Application Master 最大重試次數 (yarn-site.xml)

在 YARN 配置文件 yarn-site.xml 中,須要配置 application master 的最大重試次數:

1
2
3
4
5
6
7
<property>
  <name>yarn.resourcemanager.am.max-attempts</name>
  <value>4</value>
  <description>
    The maximum number of application master execution attempts.
  </description>
</property>

當前 YARN 版本的默認值爲 2(表示容許單個 JobManager 失敗兩次)。

Application Attempts (flink-conf.yaml)

除了上面能夠配置最大重試次數外,你還能夠在 flink-conf.yaml 配置以下:

1
yarn.application-attempts: 10

這意味着在若是程序啓動失敗,YARN 會再重試 9 次(9 次重試 + 1 次啓動),若是啓動 10 次做業還失敗,yarn 纔會將該任務的狀態置爲失敗。若是由於節點硬件故障或重啓,NodeManager 從新同步等操做,須要 YARN 繼續嘗試啓動應用。這些重啓嘗試不計入 yarn.application-attempts 個數中。

容器關閉行爲

  • YARN 2.3.0 < 版本 < 2.4.0. 若是 application master 進程失敗,則全部的 container 都會重啓。
  • YARN 2.4.0 < 版本 < 2.6.0. TaskManager container 在 application master 故障期間,會繼續工做。這具備如下優勢:做業恢復時間更快,且縮短全部 task manager 啓動時申請資源的時間。
  • YARN 2.6.0 <= version: 將嘗試失敗有效性間隔設置爲 Flink 的 Akka 超時值。嘗試失敗有效性間隔表示只有在系統在一個間隔期間看到最大應用程序嘗試次數後纔會終止應用程序。這避免了持久的工做會耗盡它的應用程序嘗試。

示例:高可用的 YARN Session

一、配置 HA 模式和 Zookeeper 集羣 在 conf/flink-conf.yaml:

1
2
3
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
yarn.application-attempts: 10

 

二、配置 ZooKeeper 服務 在 conf/zoo.cfg:

1
server.0=localhost:2888:3888

 

三、啓動 Zookeeper 集羣:

1
2
$ bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.

 

四、啓動 HA 集羣:

1
$ bin/yarn-session.sh -n 2

 

總結

本篇文章再次寫了下 Flink JobManager 的高可用配置,如何在 standalone 集羣和 YARN 集羣中配置高可用。

相關文章
相關標籤/搜索