flink源码分析之功能组件(六)-心跳组件

简介

     本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。

     本文解释心跳组件,心跳组件监听组件间连接活性,超时触发重连,保证连接有效性;断连后通知并释放资源,心跳可以带荷载,作为组件间数据交换的方式

     心跳组件依赖rpc组件实现通讯,rpc的解释可参考本系列flink源码分析之功能组件(三)-rpc组件

心跳组件

    心跳组件通过定时心跳,监视组件被管理组件的存活,心跳可携带载荷信息,实现轻量级实时/准实时的信息交换

    心跳组件依赖rpc组件实现通讯服务,关于rpc组件参考相关的分析章节

    心跳组件有两个角色:sender和receiver。检测动作是Sender主动发起请求,Reciver给Sender回一个心跳,在这一个来回sender和receiver相互检测。

设计类图

上图是心跳设计类图

HeartbeatServices  与其他模块一样,flink的代码习惯, ***Services是构建工厂,负责抓取配置,构建服务

HeartbeatTarget  监控目标接口,requestHeartbeat/receiveHeartbeat两个方法,分别是发送心跳请求,接收心跳请求

     HeartbeatSender  HeartbeatTarget发送(Sender)实现基类,屏蔽receiveHeartbeat方法

     HeartbeatReceiver HeartbeatTarget接收(Receive)实现基类,屏蔽senderHeartbeat方法

HeartbeatMonitor  心跳监测器,管理HeartbeatTarget,设置心跳监听器,超时通知

    DefaultHeartbeatMonitor 心跳检测器实现,内置定时执行器,定时检查超时,通知客户

HeartbeatManager  HeartbeatTarget管理器,负责启停HeartbeatTarget,自身是HeartbeatTarget实现,形成合成模式,操作HeartbeatTarget集合与操作单个HeartbeatTarget一致的接口,有两个实现:

    HearbeatManagerImpl 实现为心跳Receiver器管理器

    HeartbeatManagerSenderImpl 实现为心跳Sender管理器,继承自HearbeatManagerImpl自身实现了Runnable接口,并内置ScheduledExecutor,定时发送心跳请求

管理器主要方法是monitorTarget,增加心跳目标

HeartbeatListener  用户实现 心跳监听,载荷通知;负责构建载荷

心跳

      心跳是心跳组件的主要职责,sender和receive通过心跳,相互检测监控状态,可搭载负载,实时交换信息。

心跳的过程解释在下面示例章节结合作业管理器-任务管理器心跳解释

超时检测

      超时是Sender在设定时间未收到目标返回心跳,认为目标组件已不可用,通知上级调用者心跳超时

     超时检测是DefaultHeartbeatMonitor负责,

重置超时检查

前面解释了,DefaultHeartbeatMonitor实现了Runable接口,内置ScheduledExecutor

下面方法resetHeartbeatTimeout,重置延时执行方法,延时也是超时的时间,方法有两重意思,停止前面的延时;设置新的延时

DefaultHeartbeatMonitor构造函数调用了该方法初始设置

run方法

 

延时时间到了,也即心跳超时,State的4个状态,其中

        UNREACHABLE rpc异常

        CANCELED 认为停止

        TIMEOUT 只有run方法设置

因此,不执行超时的唯一方法就是不执行run方法,即延时到达前叫停ScheduledExecutor

重设超时

reportHeartbeat报告收到心跳,调用重置超时检查,重新设置延时,实际就是叫停并重置ScheduledExecutor

reportHeartbeat是HearbeatManagerImpl接收到心跳返回时调用receiveHeartbeat,调用reportHearbeat,就是说,在心跳检查延时前收到心跳回应,心跳超时检查就会被重置

示例

      本节以作业管理器任务管理器心跳为例,解释心跳组件原理和使用。作业管理器是心跳管理者,管理多个任务管理器

构建

作业管理器和任务管理器构建心跳管理器,并设置心跳目标

  • 作业管理器

作业管理器对任务管理器的心跳管理是Sender,即心跳发起者

作业管理器的心跳管理器设置任务管理器心跳目标,指向任务管理器

心跳目标继承自HeartbeatSender,并带载荷AllocatedSlotReport,任务管理器的资源slot分配报告

  • 任务管理器

与作业管理器对应,任务管理器对作业管理器的心跳管理器是Reciver,接收者;心跳管理器设置作业管理器心跳目标,继承自HeartbeatReceiver

心跳

心跳的流程,定时请求-->rpc发送请-->接收方处理心跳请求,返回-->发送方处理接收方的返回

请求

发送管理器自身实现Runable接口,使用Executor延时发送心跳请求

下图管理器发送心跳方法,发送者(Sender)也带了载荷,当然监听器可以返回null

请求返回处理handleHeartbeatRpc后面监听章节解释

发送心跳请求

发送器(Sender)调用目标的rpc gateway方法

接收方

另一边,任务管理器rpc gateway  taskExecutorGateway处理请求

作为Receiver的心跳管理器requestHeartbeat方法,上面的Sender重写了该方法,这里也是让人觉得混乱的地方,读者要注意的点,对比Sender的该方法,Receiver调用心跳目标的receivieHeartbeat方法

作为接收方,心跳管理器目标实现为Reciever,即实现了receivieHeartbeat方法,对应上面的requestHeartbeat方法

心跳回应方法receiveHeatbeat调用作业管理器gateway方法,带上荷载

发送方

最后回到发送方作业管理器的rpc gateway的heartbeatFromTaskManager方法

心跳管理器的receiveHeartbeat方法,报告心跳(reportHeartbeat),重置超时;报告荷载

处理心跳返回

上一节,请求时提过,请求完成的异步处理handleHeartbeatRpc

这里不详细介绍,根据是否有异常分别处理

总结

发送心跳-接收和返回-处理返回,一个完整心跳来回过程,相互检测,相互传递载荷

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中间件XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值