当前位置: 首页 > news >正文

20. TaskExecutor与ResourceManager心跳

20. TaskExecutor与ResourceManager心跳

  • 现在,需要回过头看 ResourceManager是如何产生心跳管理服务的。
  • cluster.initializeServices 方法的 heartbeatServices = createHeartbeatServices(configuration);产生一个 HeartbeatServicesImpl
  • jobmanager的 resourceManager启动的时候,会启动 startHeartbeatServices();

startHeartbeatServices方法

  • 该方法产生2个对象。1个taskManagerHeartbeatManager和1个jobManagerHeartbeatManager。这次主要看前面1个。
private void startHeartbeatServices() {taskManagerHeartbeatManager =heartbeatServices.createHeartbeatManagerSender(resourceId,new TaskManagerHeartbeatListener(),getMainThreadExecutor(),log);jobManagerHeartbeatManager =heartbeatServices.createHeartbeatManagerSender(resourceId,new JobManagerHeartbeatListener(),getMainThreadExecutor(),log);}
  • taskManagerHeartbeatManager:负责监控所有已注册的 TaskExecutor,是 ResourceManager 与 TaskExecutor 间心跳通信的核心组件。
  • jobManagerHeartbeatManager:与 JobManager 保持心跳(此处暂不关注)。

HeartbeatManagerSenderImpl

  • HeartbeatManagerSenderImpl 是 ResourceManager 端的心跳发送管理器,具备以下特点:
    • 继承 HeartbeatManagerImpl,是具体的心跳机制实现;
    • 实现 Runnable 接口,自身是一个周期性执行的任务。
  • 核心点:
    • 周期性遍历 getHeartbeatTargets()(即所有注册的 TaskExecutor);
    • 逐个向它们发送心跳请求(requestHeartbeat 方法)。
HeartbeatManagerSenderImpl(long heartbeatPeriod,long heartbeatTimeout,int failedRpcRequestsUntilUnreachable,ResourceID ownResourceID,HeartbeatListener<I, O> heartbeatListener,ScheduledExecutor mainThreadExecutor,Logger log,HeartbeatMonitor.Factory<O> heartbeatMonitorFactory) {super(heartbeatTimeout,failedRpcRequestsUntilUnreachable,ownResourceID,heartbeatListener,mainThreadExecutor,log,heartbeatMonitorFactory);this.heartbeatPeriod = heartbeatPeriod;//这里表明周期调度mainThreadExecutor.schedule(this, 0L, TimeUnit.MILLISECONDS);}@Overridepublic void run() {if (!stopped) {log.debug("Trigger heartbeat request.");for (HeartbeatMonitor<O> heartbeatMonitor : getHeartbeatTargets().values()) {//这里就是循环将前面taskExecutor注册心跳取出来,进行心跳requestHeartbeat(heartbeatMonitor);}//这里单线程周期调度getMainThreadExecutor().schedule(this, heartbeatPeriod, TimeUnit.MILLISECONDS);}}

requestHeartbeat 方法

//heartbeatMonitor封装了一个taskexecutor网关。说白了就是heartbeatTarget就是调用 taskexecutor方法进行交互。
private void requestHeartbeat(HeartbeatMonitor<O> heartbeatMonitor) {O payload = getHeartbeatListener().retrievePayload(heartbeatMonitor.getHeartbeatTargetId());final HeartbeatTarget<O> heartbeatTarget = heartbeatMonitor.getHeartbeatTarget();heartbeatTarget//TaskExecutorHeartbeatSender 就是前面讲的rpc调用.requestHeartbeat(getOwnResourceID(), payload).whenCompleteAsync(handleHeartbeatRpc(heartbeatMonitor.getHeartbeatTargetId()),getMainThreadExecutor());}
  • heartbeatTarget

    • 实际上是封装的 TaskExecutorHeartbeatSender

    • 通过 RPC 接口向对应 TaskExecutor 发出心跳请求;

    • 本质上是对 TaskExecutor 方法的远程调用。

  • TaskExecutorHeartbeatSender 实质上是一个封装了 TaskExecutor RPC 网关的对象,负责通过 RPC 调用向 TaskExecutor 发送心跳请求。推荐配合 Debug 调试理解整个心跳交互过程,有助于深入掌握 ResourceManager 与 TaskExecutor 之间的通信机制。

小结

  • ResourceManager 在启动阶段就为所有 TaskExecutor 准备好了心跳监控;

  • 依靠单线程周期调度器,实现对所有 TaskExecutor 的心跳请求发送;

  • 心跳本质是对 TaskExecutor RPC 方法的远程调用

  • 如果某个 TaskExecutor 心跳超时或失败,会触发资源回收与故障恢复机制。

http://www.dtcms.com/a/290968.html

相关文章:

  • HTML前端颜色渐变动画完整指南
  • 处理excel/wps表格中数值格式的警告的工具和脚本
  • Python 进阶(五): Excel 基本操作
  • Android系统更新实现--OTA空中升级
  • Selenium 处理表单、弹窗与文件上传:从基础到实战
  • 杰发科技AC7840——硬件crc使用
  • 7月21号打卡
  • 破解哈希极化:基于主动路径规划的智算网络负载均衡方案
  • Shell 编程基础入门从认识到实战
  • OSS文件上传(三):断点续传
  • C语言关键字深度解析:从入门到精通
  • 数字ic后端设计从入门到精通12(含fusion compiler, tcl教学)全定制设计进阶
  • 【LeetCode数据结构】栈的应用——有效的括号问题详解
  • Centos安装最新docker以及ubuntu安装docker
  • ESP32-S3学习笔记<1>:ESP-IDF的安装与命令
  • MySQL 核心知识点梳理(2)
  • 贪心算法(基础算法)
  • 鸿蒙DevEco Studio找不到JsonFormat插件
  • 卷积神经网络中的注意力机制:CBAM详解与实践
  • 各种名词解释
  • NISP-PTE基础实操——代码审计
  • 数学建模--层次分析法
  • 17 零基础学webUI | Controlnet精讲(03)-动作姿态类控图详解
  • 孤独感和社交频率啥关系
  • 04-UE蓝图节点基本结构讲解
  • 人形机器人CMU-ASAP算法理解
  • 安全告警研判流程
  • JAVA后端开发—— JWT(JSON Web Token)实践
  • Linux system-timesyncd时间同步机制详解
  • MTSC2025参会感悟:大模型 + CV 重构全终端 UI 检测技术体系