Flink1.19心跳机制

概要

Flink1.19心跳机制实现原理

以ResourceManager与TaskManager(TaskExecutor)之间的心跳为例

整体架构流程

1.resourcemanager的onstart()方法

2.调用startResourceManagerServices()

3.调用startHeartbeatService()方法,在这个方法里启动心跳服务

4.创建taskManagerHeartBeatManager对象,我们点进createHeartBeatManagerSender方法,在这个方法内部创建了定时调度的线程池发送心跳

5.mainThreadExecutor定时调度的线程池,在这里我们能看到delay为0L,也就是说立刻会调用到this对象的run方法(下面),进入run方法,我们能看到有一个getHeartbeatTargets()方法,我们点进这个方法

6.返回得到一个heartbeatTargets对象,调用他的values()方法,返回一个map。

map中key为resourceid,value为heartbeatMonitor对象。

7.我们可以看到这个for循环在遍历这个map,对于每一个kv,会发送一个requestHeartbeat(心跳请求)。那这个map中到底存了什么,什么时候向map存数据的呢?我们继续往下看

得前面一篇文章讲到了taskexecutor向resourcemanager注册,taskexecutor向RM注册会发送注册请求消息,最后被RM的registerTaskExecutor方法接收处理,在这个方法中,就向这个map中存储数据了

8.

进入registerTaskExecutorInternal方法

9.重要‼️taskManagerHeartbeatManager.monitorTarget这个方法里就向map存储值了n

10.我们可以看到heartbeartTargets.put()向这个map里存值,每一个kv对应着一个taskmanager或者jobmaster

11.这个时候我们再回头看这个定时调度的任务,此时map中有值,会调用requestHeartbeat()方法,点进这个方法

12.调用requestHeartbeat()方法,传进去两个参数,一个是resourceid(每一个tm后者jobmaster都有唯一resourceid),另一个payload,是发送的消息数据,下面的whencompleteAsync是心跳消息发送后,失败或者成功的逻辑就在这里面,我们继续点进requestheartbeat()方法

13.可以看到这里用到了动态代理,最终调用到taskexecutor的heartbeatFromresourcemanager方法中

14.点进requestheartbeat

15.点进receiveHeartBeat方法

17.taskexecutor接受到心跳后再向rm发送心跳,如此反复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值