主页 > 新闻资讯 > 大数据培训:Flink守护进程容错

大数据培训:Flink守护进程容错

作者:张老师 浏览次数: 2021-03-19 17:52
之前我们已经讲了Flink的作业执行容错机制,这是Flink容错机制的重要一环,而在作业执行层面的容错之外,守护进程容错也是一个重要的容错方案。今天的大数据培训分享,我们就来讲讲,Flink守护进程容错机制。

Flink守护进程容错

对于分布式系统来说,守护进程的容错是基本要求而且已经比较成熟,基本包括故障检测和故障恢复两个部分:故障检测通常通过心跳的方式来实现,心跳可以在内部组件间实现或者依赖于zookeeper等外部服务;而故障恢复则通常要求将状态持久化到外部存储,然后在故障出现时用于初始化新的进程。

以最为常用的on YARN的部署模式来讲,Flink关键的守护进程有JobManager和TaskManager两个,其中JobManager的主要职责协调资源和管理作业的执行分别为ResourceManager和JobMaster两个守护线程承担,三者之间的关系如下图所示。

大数据培训:Flink守护进程容错

在容错方面,三个角色两两之间相互发送心跳来进行共同的故障检测。此外在HA场景下,ResourceManager和JobMaster都会注册到zookeeper节点上以实现leader锁。

TaskManager的容错

如果ResouceManager通过心跳超时检测到或者通过集群管理器的通知了解到TaskManager故障,它会通知对应的JobMaster并启动一个新的TaskManager以做代替。注意ResouceManager并不关心Flink作业的情况,这是JobMaster的职责去管理Flink作业要做何种反应。

如果JobMaster通过ResouceManager的通知了解到或者通过心跳超时检测到TaskManager故障,它首先会从自己的slot pool中移除该TaskManager,并将该TaskManager上运行的所有Tasks标记为失败,从而触发Flink作业执行的容错机制以恢复作业。

TaskManager的状态已经写入checkpoint并会在重启后自动恢复,因此不会造成数据不一致的问题。

ResourceManager的容错

如果TaskManager通过心跳超时检测到ResourceManager故障,或者收到zookeeper的关于ResourceManager失去leadership通知,TaskManager会寻找新的leader ResourceManager并将自己重启注册到其上,期间并不会中断Task的执行。

如果JobMaster通过心跳超时检测到ResourceManager故障,或者收到zookeeper的关于ResourceManager失去leadership通知,JobMaster同样会等待新的ResourceManager变成leader,然后重新请求所有的TaskManager。考虑到TaskManager也可能成功恢复,这样的话JobMaster新请求的TaskManager会在空闲一段时间后被释放。

ResourceManager上保持了很多状态信息,包括活跃的container、可用的TaskManager、TaskManager和JobMaster的映射关系等等信息,不过这些信息并不是ground truth,可以从与JobMaster及TaskManager的状态同步中再重新获得,所以这些信息并不需要持久化。

JobMaster的容错

如果TaskManager通过心跳超时检测到JobMaster故障,或者收到zookeeper的关于JobMaster失去leadership通知,TaskManager会触发自己的错误恢复(目前是释放所有Task),然后等待新的JobMaster。如果新的JobMaster在一定时间后仍未出现,TaskManager会将其slot标记为空闲并告知ResourceManager。

如果ResourceManager通过心跳超时检测到JobMaster故障,或者收到zookeeper的关于JobMaster失去leadership通知,ResourceManager会将其告知TaskManager,其他不作处理。

JobMaster保存了很多对作业执行至关重要的状态,其中JobGraph和用户代码会重新从HDFS等持久化存储中获取,checkpoint信息会从zookeeper获得,Task的执行信息可以不恢复因为整个作业会重新调度,而持有的slot则从ResourceManager的TaskManager的同步信息中恢复。

并发故障

在on YARN部署模式下,因为JobMaster和ResourceManager都在JobManager进程内,如果JobManager进程出问题,通常是JobMaster和ResourceManager并发故障,那么TaskManager会按以下步骤处理:

按照普通的JobMaster故障处理。

在一段时间内不断尝试将slot提供给新的JobMaster。

不断尝试将自己注册到ResourceManager上。

值得注意的是,新JobManager的拉起是依靠YARN的Application attempt重试机制来自动完成的,而根据Flink配置的YARN Application keep-containers-across-application-attempts行为,TaskManager不会被清理,因此可以重新注册到新启动的Flink ResourceManager和JobMaster中。

关于大数据培训,Flink守护进程容错,以上就为其执行细节做了简单的介绍了。Flink在守护进程容错方面,与作业执行的容错机制配合起来,确保了Flink容错机制的高效可靠。成都加米谷大数据,专业大数据培训机构,大数据开发,数据分析与挖掘,零基础就业班本月正在招生中,课程大纲及课程视频可联系客服获取!
热点排行
推荐文章
立即申请>>