flink 高可用 high-availability 配置的重试次数无效问题

问题背景

我根据这篇博客https://blog.csdn.net/cndotaci/article/details/106870413的介绍,配置了flink基于yarn的高可用,测试时发现配置的任务失败重试2次没有生效,我测试到第6次时,任务仍然能够被yarn拉起

flink 高可用 high-availability 配置的重试次数无效问题_第1张图片
如上图,除第一次手动启动外,下面的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数据。

你可能感兴趣的:(Flink,大数据,hadoop)