flink 高可用 high-availability 配置的重試次數無效問題

問題背景

我根據這篇博客https://blog.csdn.net/cndotaci/article/details/106870413的介紹,配置了flink基於yarn的高可用,測試時發現配置的任務失敗重試2次沒有生效,我測試到第6次時,任務仍然能夠被yarn拉起

在這裏插入圖片描述
如上圖,除第一次手動啓動外,下面的5次都是yarn的HA生效自動拉起。

那麼,下面配置中的重試次數爲什麼沒有生效?

flink版本:1.10.0

flink-conf.yaml配置:

$ grep -v ^# flink-conf.yaml |grep -v ^$
jobmanager.rpc.address: localhost
jobmanager.rpc.port: 6123
jobmanager.heap.size: 1024m
taskmanager.memory.process.size: 1568m
taskmanager.numberOfTaskSlots: 1
parallelism.default: 1
high-availability: zookeeper
high-availability.storageDir: hdfs:///flink/ha/
high-availability.zookeeper.quorum: uhadoop-op3raf-master1,uhadoop-op3raf-master2,uhadoop-op3raf-core1
state.checkpoints.dir: hdfs:///flink/checkpoint
state.savepoints.dir: hdfs:///flink/flink-savepoints
state.checkpoints.num-retained:60
state.backend.incremental: true
jobmanager.execution.failover-strategy: region
jobmanager.archive.fs.dir: hdfs:///flink/flink-jobs/
historyserver.web.port: 8082
historyserver.archive.fs.dir: hdfs:///flink/flink-jobs/
historyserver.archive.fs.refresh-interval: 10000
# HA重試次數
yarn.application-attempts: 2

ssh到jm節點,手動kill任務的操作日誌:

[root@uhadoop-op3raf-task48 ~]# jps
34785 YarnTaskExecutorRunner
16853 YarnTaskExecutorRunner
17527 PrestoServer
33289 YarnTaskExecutorRunner
18026 YarnJobClusterEntrypoint
20283 Jps
39599 NodeManager
[root@uhadoop-op3raf-task48 ~]# kill -9 18026
[root@uhadoop-op3raf-task48 ~]# jps
34785 YarnTaskExecutorRunner
16853 -- process information unavailable
17527 PrestoServer
21383 Jps
33289 YarnTaskExecutorRunner
20412 YarnJobClusterEntrypoint
39599 NodeManager
[root@uhadoop-op3raf-task48 ~]# kill -9 20412
[root@uhadoop-op3raf-task48 ~]# jps
34785 YarnTaskExecutorRunner
21926 YarnJobClusterEntrypoint
23207 Jps
17527 PrestoServer
33289 YarnTaskExecutorRunner
39599 NodeManager
[root@uhadoop-op3raf-task48 ~]# kill -9 21926
[root@uhadoop-op3raf-task48 ~]# jps
34785 YarnTaskExecutorRunner
23318 YarnJobClusterEntrypoint
26279 Jps
17527 PrestoServer
33289 YarnTaskExecutorRunner
39599 NodeManager
[root@uhadoop-op3raf-task48 ~]# kill -9 23318

原因

參數yarn.application-attempts,與另外一個參數有關係:yarn.application-attempt-failures-validity-interval,原文檔描述:The failure number will no take attempt failures which happen out of the validityInterval into failure count。

大概意思是需要在設置的這個interval時間內失敗重試,纔會認爲flink job是進行了一次失敗重試,attempts的計數纔會加1。

如果超過這個interval時間才進行的失敗重試,並不會爲attempts計數。

仍以最開始的圖和如下配置爲例:

# 最大重試次數,包含首次啓動,配置爲2(1次首次啓動+1次yarn失敗重試)
yarn.application-attempts:2,
# 只有在10s內flink job失敗後被yarn重新拉起纔算做1次attempts。
yarn.application-attempt-failures-validity-interval = 10000(默認值,10s)

任務19:09首次啓動,yarn分別在19:11和19:16進行了失敗重啓,因爲默認的interval爲10秒,所以這兩次重啓都沒有爲attempts計數。

如果將interval改爲10分鐘,19:09首次啓動時attempts計數,值爲1,19:11的重啓attempts再次計數,值爲2,此時達到了配置的2次,將不會再有19:16的重啓。

ps:參數yarn.application-attempt-failures-validity-interval爲hadoop的ResourceManager API 參數,詳見https://hadoop.apache.org/docs/r3.1.0/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Application_Attempts_API

另,在flink應用開啓了checkpoint的情況下,通過HA拉起的任務,仍然可以重用上次任務失敗時在checkpoint保存的state數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章