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

    技术2022-07-12  63

    问题背景

    我根据这篇博客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数据。

    Processed: 0.011, SQL: 9