Flink重启策略(restart-strategy)优化

Flink重启策略(restart-strategy)优化

背景

1、实时任务依赖Zookeeper做高可用,当Zookeeper节点重启,会导致相当一部分任务挂掉;
2、依赖DCache、HBase这类外部系统的任务,稳定性较差,当外部系统抖动很容易就导致任务运行失败。

理想情况下,我们希望在外部依赖出现波动时,任务能重新连接/连接其他服务节点,而实际上,Flink本身也提供了任务自动重启的支持,我们默认使用的是failure-rate重启策略。上述两类都是由于外部系统波动导致任务稳定性下降的问题,通过分析任务日志,任务都是因为重启超过集群配置的失败阈值:10分钟内超过5次失败,然而,任务实际上并没有重启5次。

问题一:为什么外部系统抖动会导致任务触发failure-rate阈值立即失败

问题二:依赖Zookeeper的任务为什么只挂掉一部分

问题分析

  • 简单描述下运行时出现异常的处理流程:

    Task failed -> TaskExecutor上报JobMaster失败信息 -> 判断是否存在该Task执行信息 -> 根据重启策略判断是否需要重启,根据故障转移策略选择需要重启的所有Task -> 停止需要重启的Task ->更新数据,移除Task执行信息 -> 生成并写入新的执行信息 -> 重新调度启动

    详细流程可看: Flink——Task退出流程与Failover机制

结论

问题一: flink默认的故障转移策略为RestartPipelinedRegionFailoverStrategy, 当流计算任务有Task出现失败,会重启该所在Piplined Region上的所有Task。当不同Region的多个Task因同个异常失败时,JobMaster短时间会处理多个(<=region count)异常,导致failure-rate达到阈值。

问题二: 挂掉的任务都是存在多个region(各并发没有数据交互)

优化

升级failure-rate,当短时间因同个异常导致多次Task Failed,failure-rate只统计一次。

目前问题与patch已反馈社区,具体可以点击链接查看: FLINK-26315

猜你喜欢

转载自blog.csdn.net/qq_30708747/article/details/123121042
今日推荐