Flink 的任务槽和槽共享

在 Apache Flink 中,任务槽(Task Slot)槽共享组(Slot Sharing Group) 是资源管理和任务调度的关键机制。它们决定了 Flink 如何在集群中分配资源并执行任务。


一、任务槽(Task Slot)

1. 定义

  • Task Slot 是 TaskManager 提供的资源单位,代表一个独立的线程或资源隔离单元。
  • 每个 Slot 可以运行多个 SubTask(来自不同 JobVertex),但这些 SubTask 必须属于同一个 Job,并且可以共享 Slot。

2. 配置方式

yaml 复制代码
# flink-conf.yaml
taskmanager.numberOfTaskSlots: 4
  • 一个 TaskManager 可以配置多个 Slot(例如 4 个)。
  • 每个 Slot 默认拥有相同的内存资源(可通过 taskmanager.memory.task.heap.size 等参数精细控制)。

3. Slot 的作用

作用 描述
资源隔离 Slot 是资源分配的基本单位,限制并发任务数。
并行度支持 一个 Job 的并行度不能超过 Slot 总数。
资源利用率 合理设置 Slot 数量可提升资源利用率和吞吐量。

二、槽共享(Slot Sharing)

1. 定义

  • 槽共享(Slot Sharing) 是指多个 Operator 或 SubTask 可以运行在同一个 Slot 中。
  • 这是 Flink 优化资源利用的重要机制,避免为每个 Operator 单独分配 Slot。

2. Slot Sharing Group

  • 通过 slotSharingGroup() 方法将一组 Operator 分配到同一个槽共享组。
  • 同一个组内的 Operator 可以共享 Slot,即可以在同一个 Slot 中执行。
示例代码:
java 复制代码
stream.map(new MyMapper()).name("Mapper").slotSharingGroup("group1");
stream.keyBy(...).process(new MyProcessFunction()).name("Processor").slotSharingGroup("group1");
  • 上述两个 Operator 属于同一个 Slot Sharing Group,Flink 将尝试将它们部署在同一个 Slot 中。

三、Slot 共享的条件

条件 描述
同一个 Job 只有同一个 Job 的 Operators 才能共享 Slot。
相同 Slot Sharing Group Operator 必须属于同一个 Slot Sharing Group。
不需要网络传输 如果两个 Operator 之间是一对一连接(如 map → map),可以共享 Slot。
Keyed Stream Keyed Operators 可以共享 Slot,前提是它们的 key 分布一致。

四、Slot 分配策略

1. Slot 分配流程

  • Flink Scheduler 根据 JobGraph 构建 ExecutionGraph。
  • 根据 Slot Sharing Group 和并行度,将 SubTasks 分配到各个 Slot。
  • 每个 Slot 包含多个连续的 Operators(SubTasks),形成 Operator Chain。

2. Slot 分配示意图

假设一个 Job 包含如下结构:

复制代码
Source → Map → Filter → Sink

如果所有 Operators 都允许共享 Slot,则整个链可能被分配到一个 Slot 中。


五、资源分配与并行度关系

TaskManager 数量 Slot 数量/TaskManager 最大并行度
2 4 8
3 2 6
1 8 8

注意:Job 的并行度不能超过 Slot 总数。


六、高级配置与优化建议

配置项 描述
default_slot_sharing_group 默认 Slot Sharing Group 名称
slot.model.type 设置为 SHAREDDEDICATED 控制是否启用共享
execution.checkpointing.min-pause-between-checkpoints 避免 Checkpoint 对 Slot 使用造成影响
taskmanager.memory.managed.fraction 控制 Slot 内存使用比例

七、总结对比表

概念 描述 是否默认启用
Task Slot TaskManager 的资源单位 ✅ 默认启用
Slot Sharing 多个 Operator 共享一个 Slot ✅ 默认启用
Slot Sharing Group 自定义分组控制共享范围 ❌ 默认不设置
DEDICATED Slot 强制 Operator 独占 Slot ✅ 支持
相关推荐
ebok.29 分钟前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
民乐团扒谱机2 小时前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
星野川崎2062 小时前
电商多店运维:云机长期挂机频繁掉线、账号无故风控原因剖析与解决方案
大数据·运维·云计算·电商
小柯南敲键盘3 小时前
电商图片翻译工具推荐,批量处理主图视频字幕,免费试用
大数据·人工智能·python·音视频
观远数据3 小时前
零售连锁BI选型清单:什么样的场景适合ChatBI,什么样的场景不适合
大数据·人工智能·零售
大大大大晴天4 小时前
实时数仓怎么建:基于 StarRocks 的分层设计与实践
大数据
roman_日积跬步-终至千里5 小时前
【计算资源节省与稳定性治理】自助查询系统请求幂等性设计
大数据
小玮看世界6 小时前
当“安全“变成“教训“:《拟人化暂行办法》时代,AI护栏的过度拒答之困与破局
大数据·人工智能
FserSuN7 小时前
回顾Spark的概念与应用
大数据·分布式·spark
一知半解仙8 小时前
大国博弈与机器人纪元:我们正站在怎样的历史拐点?
大数据·人工智能·机器人