Flink SlotSharingGroup 机制详解

1、静态slot分配流程

  1. 客户端提交作业:客户端将JobGraph提交给JobManager,JobGraph包含了作业的逻辑数据流和算子信息。

  2. 生成ExecutionGraph:JobManager将JobGraph转换为ExecutionGraph,这是一个并行化的执行计划,包含了所有执行顶点(ExecutionVertex)和边。

  3. 申请slot资源:JobManager中的调度器向ResourceManager申请slot资源。

  4. 分配静态slot:ResourceManager检查当前可用的TaskManager slot,如果资源足够,就将slot分配给JobManager。

  5. 部署任务:JobManager将任务部署到分配到的slot中执行。

2、动态slot分配流程

动态slot分配的核心是为每个SlotSharingGroup单独定义资源需求,Flink会根据这些需求动态申请匹配的slot资源。

  1. 资源需求生成:JobManager分析JobGraph中每个SlotSharing组的资源需求(包括CPU、堆内存、托管内存、扩展资源等)。
  2. 资源声明:Scheduler将SlotRequest进行聚合,生成ResourceRequirement并发送给ResourceManager。
  3. 资源匹配:ResourceManager检查集群中的可用资源,尝试找到匹配的TaskManager slot。
  4. 动态资源申请:如果现有资源不足,ResourceManager通过资源提供商(如YARN、Kubernetes)申请新的TaskManager。
  5. slot分配:ResourceManager将匹配的slot提供给JobManager。
  6. 任务部署:JobManager将任务部署到获得的slot中。

1、作用

基于FLIP-56(Dynamic Slot Allocation)实现,核心思想是按需申请不同规格的slot,最大化资源利用效率

2、case

java 复制代码
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

SlotSharingGroup ssgA = SlotSharingGroup.newBuilder("a")
  .setCpuCores(1.0)
  .setTaskHeapMemoryMB(100)
  .build();

SlotSharingGroup ssgB = SlotSharingGroup.newBuilder("b")
  .setCpuCores(0.5)
  .setTaskHeapMemoryMB(100)
  .build();

someStream.filter(...).slotSharingGroup("a") // Set the slot sharing group with name "a"
.map(...).slotSharingGroup(ssgB); // Directly set the slot sharing group with name and resource.

env.registerSlotSharingGroup(ssgA);

3、核心实现

  • JobMaster/DefaultScheduler(资源使用者):
    负责生成 ExecutionGraph、计划 ExecutionVertex 的部署,向 SlotPool 发起分配请求;当使用完成后释放 slot。
  • SlotPool(Job 级别 slot 池):
    维护 Job 可用/已分配的物理/逻辑 slot 视图;若本地池不满足,会向 ResourceManager 的 SlotManager 请求已有 TaskExecutor 的空闲 slot(静态模式下仅在集群既有 TM 范围内调度)。
  • ResourceManager/SlotManager(集群级 slot 目录):
    聚合所有 TaskExecutor 的 slot 状态,处理 JobMaster 的请求,向目标 TaskExecutor 下发分配指令。静态模式下不会再去底层系统(YARN/K8s)扩容。
  • TaskExecutor(资源提供者):
    通过 SlotTable 维护本机 slot,响应 ResourceManager 的分配请求,最终以 offerSlot 的方式把已分配 slot 提供给 JobMaster 绑定并部署 Task。
  • SimpleExecutionSlotAllocator/SlotSharingExecutionSlotAllocator(共享策略):
    在同一 TM slot 上复用多个同 Job 的 subtasks;控制 slot 树与 Co-location、ResourceProfile 匹配与约束。
相关推荐
Elastic 中国社区官方博客19 分钟前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索
极客先躯1 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188961 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java
jinanwuhuaguo1 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
我命由我123451 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
aXin_ya1 小时前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务
Halo_tjn2 小时前
Java Set集合相关知识点
java·开发语言·算法
Linsk2 小时前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
许彰午2 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
zhouwy1132 小时前
Java 快速入门笔记:从基础语法到 Spring Boot 实战
java