背景:flink on yarnPer-job 模式下flink 程序会经常挂掉,直接原因是是对应节点上的 flink的 job manager 挂掉了,导致程序失败,flink的重启策略,只对于task manager生效 。 因此为保证稳定性,需要配置job manager 高可用。
实现方案 官方:当运行一个高可用的 YARN 集群时,我们不会运行多个 JobManager(ApplicationMaster) 实例,而是只运行一个,在失败时由 YARN 重新启动。确切的行为取决于您使用的特定 YARN 版本。
容器关闭行为
- YARN 2.3.0 < 版本 < 2.4.0。 如果application master进程失败,则所有的container都会重启。
- YARN 2.4.0 < 版本 < 2.6.0。 TTaskManager container在 application master 故障期间,会继续工作。这具有以下优点:启作业恢复时间更快,且缩短所有task manager启动时,申请资源的时间。
- YARN 2.6.0 <= version:将尝试失败有效性间隔设置为 Flink 的 Akka 超时值。尝试失败有效性间隔表示只有在系统在一个间隔期间看到最大应用程序尝试次数后才会终止应用程序。这避免了持久的工作会耗尽它的应用程序尝试。
配置修改 flink-conf.yaml 添加如下配置,这里必须添加zookeeper 信息,官方文档pre job 只要求添加 重启参数,不添加zookeeper的话,task manager 会和job manager 一起挂掉, 只会重启对应的job manager
【flink on yarn Per-job模式High Availability 配置】# flink job manager次数这个参数必须小于yarn.resourcemanager.am.max-attempts(没测试过)配置之后,flink 程序会重启3-1次,(默认启动程序也算1次),由于yarn版本大于2.60,5分钟内,重启次数不得超过2次,超过2次,程序将会挂掉。
yarn.application-attempts: 3
# 添加zookeeper 配置
high-availability: zookeeper
high-availability.zookeeper.quorum: 10.5.1.142:2181
# job manager元数据在文件系统储存的位置
high-availability.storageDir: hdfs:///flink/recovery
# 设置超时时间
akka.ask.timeout:5min
测试 1启动flink 程序,
文章图片
文章图片
2 kill 掉对应的 YarnSessionClusterEntrypoint (对应job manager)所在进程
文章图片
文章图片
新的job manager,已经被重新,恰巧也和task Manager一个一个节点
文章图片
task manager 上对应日志如上,与旧的job manager 的ResourceManager通信,当超时大于10s后,将其标记为失败,之后根据zookeeper去注册到新的job managerResourceManager 上个上
文章图片
相关文档:官方文档地址
推荐阅读
- flink|Flink 的学习笔记
- 大数据|FLIP-147(支持包含结束任务的 Checkpoint 操作与作业结束流程修正)
- 大数据技术栈|网易互娱基于 Flink 的支付环境全关联分析实践
- StarRocks|使用StarRocks内置工具Routine Load同步Mysql/TiDB/PG等增量更新数据到StarRocks
- flink|Flink CDC 同步mysql数据
- java|阿里巴巴开源的 Blink 实时计算框架真香
- flink|【大数据面经系列】大数据开发(实时计算方向)面试题(一)
- Flink|Flink入门
- Flink的sink实战之二(kafka)