先看下官網對Flink 各個組件的描述:https://ci.apache.org/projects/flink/flink-docs-release-1.10/concepts/runtime.html#job-managers-task-managers-clients
啟動流程。
Flink 的 checkpoint 可以保證任務在遇到異常的時候,可以自動從上一個checkpoint 的狀態恢復,保障任務的正常的運行,這應該是大家都知道的事情。
上面的異常,指的是執行計算任務的 taskmanager 的異常,如果是jobmanager 遇到異常是不能自動恢復的。(因為需要恢復的元數據、執行圖、各種端口、路徑都是jobmanager 管理的,jobmanager 死了,就都沒有了)
下面內容來自官網:https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/jobmanager_high_availability.html
JobManager協調每個Flink部署。它既負責調度又負責資源管理。
默認情況下,每個Flink集群只有一個JobManager實例。這將創建一個單點故障(SPOF):如果JobManager崩潰,則無法提交任何新程序,並且正在運行的程序也會失敗。
使用JobManager高可用性,您可以從JobManager故障中恢復,從而消除SPOF。您可以為獨立群集和YARN群集配置高可用性。
在運行高可用的YARN群集時,我們不會運行多個JobManager(ApplicationMaster)實例,而只能運行一個實例,當實例出現故障時,YARN會重新啟動該實例。 確切的行為取決於您使用的特定YARN版本。
配置 yarn-site.xml
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
<description>
The maximum number of application master execution attempts.
</description>
</property>
注:重試次數最大為 4次,默認為 2(允許單個jobmanager的故障)
不同的hadoop版本上,yarn container 有不同的異常恢復行為:
- YARN 2.3.0 < version < 2.4.0:所以container重啟
- YARN 2.4.0 < version < 2.6.0:master的container掛了,taskmanager的container可以繼續執行;恢復更快
- YARN 2.6.0 <= version:根據Flink配置,只有任務在一定時間內連續嘗試了一定次數才會被kill。
flink-conf.yaml 配置:
high-availability: zookeeper high-availability.zookeeper.quorum: localhost:2181 high-availability.storageDir: hdfs:///flink/recovery high-availability.zookeeper.path.root: /flink yarn.application-attempts: 10
具體配置就這樣的,官網都有描述。
關於測試,我起了下面這么一個簡單的任務:讀kafka,寫kafka
測試內容是:在有無 checkpoint、有無 HA 的情況下 kill taskmanager 和 jobmanager
測試用例和測試結果如下:
1、無checkpoint kill taskmanager : 直接掛掉 2、有checkpoint 1、先不配置HA kill taskmanager : 1 次:回退上一次checkpoint, taskmanager 遷移,jobmanager 不遷移 (可配置精確一次) 2 次:回退上一次checkpoint, taskmanager 遷移,jobmanager 不遷移 3 次: kill jobmanager : 1 次: 直接掛掉 2、配置HA kill taskmanager : 1 次:回退上一次checkpoint, taskmanager 遷移,jobmanager 不遷移 2 次:回退上一次checkpoint, taskmanager 遷移,jobmanager 不遷移 kill jobmanager : 1 次:taskmanager 正常寫數據,webui 短時不能訪問,jobmanager 恢復后,會遷移,tm 會從checkpoint 恢復一次 2 次:taskmanager 正常寫數據,webui 短時不能訪問,jobmanager 恢復后,會遷移,tm 會從checkpoint 恢復一次 3 次:同上 taskmanager kill 次數: 10 任務運行正常 jobmanager kill 次數: 10 任務運行正常 # yarn 和 flink 的重試次數都是短時間內的嘗試,如果任務已經正常運行一段時間就重新計數了
重啟yarn 頁面:
Flink 1.10 啟動比較快,看不到這個頁面了:
搞定
關於checkpoint 重啟,精確一次的測試,可以參考下一篇 Flink kafka connector 端到端精確一次測試 (還沒寫,寫了回來更新)
歡迎關注Flink菜鳥公眾號,會不定期更新Flink(開發技術)相關的推文