Flink 资源静态调度

本内容是根据 Flink 1.18.0-Scala_2.12 版本源码梳理而来。本文主要讲述任务提交时,为 Task 分配资源的过程。

以下是具体步骤讲解:

  1. TaskManager 资源注册
    TaskManager 在启动时,会向 ResourceManager 注册资源。ResourceManager 会将 TaskManager 的资源以 ResourceProfile 的形式记录。
  2. 提交 Job
    再 Flink 系统启动后,会启动一个名为 Dispatcher 的组件。Flink 客户端会将用户编写的代码整理为 JobGraph,并提交至 Dispatcher。Dispatcher 会为每一个 JobGraph 创建一个 JobMaster。由 JobMaster 管理其 Job 的资源分配。
    JobMaster 内部包含一个调度器(Scheduler),再 1.18 版本中,Scheduler 的实现有:DefaultSchedulerAdaptiveSchedulerAdaptiveBatchScheduler
    默认使用 DefaultScheduler,其使用 PipelinedRegionSchedulingStrategySchedulingStrategy 作为他的调度
  3. JobMaster 从 SlotPool 中挑选资源分配给 Job
    每个 JobMaster 有一个 SlotPool,负责管理属于它的资源。
    对于 PipelinedRegionSchedulingStrategySchedulingStrategy,它会使用 SlotSharingStrategySlotSelectionStrategy 来决定调度策略。
    SlotSharingStrategy 负责将某些 SubTask 放在同一 Slot 中,此时产生的 Slot 叫做 SharedSlot。SharedSlot 只是一个逻辑概念,不是具体的物理资源。共享的策略目前只有 LocalInputPreferredSlotSharingStrategy
    当作业是首次提交,且不与其他作业共享资源时,SharedSlot 是不与物理资源对应的。那么就需要 SlotSelectionStrategy 来为 SharedSlot 选择物理资源。为其选择的物理资源被称为 PhysicalSlot。SlotSelectionStrategy根据某种策略,从 SlotPool 中挑选 PhysicalSlot 分配给 SharedSlot。这个策略目前有 DefaultLocationPreferenceSlotSelectionStrategyEvenlySpreadOutLocationPreferenceSlotSelectionStrategy
    然后,每个 SubTask 对应的执行节点(ExecutionVertex)中会记录期望分配的资源的信息。
    但是,作业首次提交时,它的 JobMaster 的 SlotPool 中是没有任何资源的,那么就需要下一步。
  4. JobMaster 向 ResourceManager 申请资源
    JobMaster 会将 SlotPool 中缺少的资源信息以 ResourceProfile 的形式发送给 ResourceManager 来申请资源。具体是 SlotPoolService 向 SlotManager 来申请资源。
    SlotManager 的具体实现目前有:DeclarativeSlotManagerFineGrainedSlotManagerDeclarativeSlotManager 支持作业级动态调度,FineGrainedSlotManager支持任务级动态调度。早期版本还有 SlotManagerImpl,其只支持静态调度,已被抛弃。
    SlotManager 接收到 JobMaster 所需的资源后,会与已注册的资源以某种策略进行匹配,匹配成功后,会将资源发送给 JobMaster。
  5. JobMaster 向 TaskManager 申请资源
    JobMaster 从 ResourceManager 得到可用的资源的信息后,会向每个资源对应的 TaskManager 发送资源信息。TaskManager 在收到资源信息后,会从它的资源中划分出相应的资源,并创建 Slot,然后激活 Slot。之后 TaskManager 会将已激活的 Slot 资源信息返回给 JobMaster。
    JobMaster 将发送给 TaskManager 的资源信息与TaskManager 返回的资源信息进行对比,若对比无误,则将 Slot 资源存储至 SlotPool。
  6. 部署 Task
    经过上面几步,Slot 已准备完毕。接下来,就是期望的资源信息会与已准备的资源进行匹配,若匹配成功,则部署。
相关推荐
逸Y 仙X2 小时前
Git常见命令--助力开发
java·大数据·git·java-ee·github·idea
caihuayuan42 小时前
PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别
java·大数据·sql·spring
B站计算机毕业设计超人2 小时前
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hadoop·爬虫·机器学习·课程设计·数据可视化·推荐算法
(; ̄ェ ̄)。3 小时前
在nodejs中使用ElasticSearch(二)核心概念,应用
大数据·elasticsearch·搜索引擎
一个儒雅随和的男子4 小时前
Elasticsearch除了用作查找以外,还能可以做什么?
大数据·elasticsearch·搜索引擎
Sui_Network4 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链
ZKNOW甄知科技4 小时前
IT服务运营管理体系的常用方法论与实践指南(上)
大数据·数据库·人工智能
车到山前必有“陆”5 小时前
智能硬件解决方案
大数据·人工智能·经验分享·科技·产品运营·智能硬件
车到山前必有“陆”5 小时前
智能硬件-01智能停车场
大数据·人工智能·经验分享·科技·产品运营·智能硬件
跳跳的向阳花5 小时前
06、ElasticStack系列,第六章:elasticsearch设置密码
大数据·elasticsearch·jenkins