惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
量子位
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
IT之家
IT之家
V
Visual Studio Blog
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
D
Docker
V
V2EX

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
你还不知道的 Flink 调优手段:Task 调度策略
tonyabasy · 2026-06-25 · via 博客园_首页

本页介绍 均衡任务调度策略 的背景与原理,以及如何在运行流式作业时使用该功能。

背景

当 Flink 流式作业中所有顶点(Vertex)的并行度不一致时,Flink 默认策略的任务部署有时会导致某些 TaskManager 分配到的任务较多,而其他 TaskManager 分配到的任务较少,从而造成任务较多的 TaskManager 资源利用率过高,成为整个作业处理的瓶颈。

任务调度倾斜示例

如图 (a) 所示,给定一个包含两个顶点的 Flink 作业:JobVertex-A(JV-A)JobVertex-B(JV-B),并行度分别为 63,且两个顶点共享同一个 Slot 共享组。在默认任务调度策略下,如图 (b) 所示,各 TaskManager 上的任务分配可能出现较大差异。具体而言,任务最多的 TaskManager 可能承载 4 个任务,而任务最少的 TaskManager 可能只有 2 个任务。因此,承载 4 个任务的 TaskManager 很容易成为整个作业的性能瓶颈。

为此,Flink 提供了基于任务数量的均衡任务调度策略能力。在作业的资源视图中,它旨在使分配到每个 TaskManager 的任务数量尽可能接近,从而改善 TaskManager 之间的资源利用率偏差。

注意:并行度不一致并不意味着必须使用该策略,因为在实际场景中并不总是出现上述问题。


原理

基于任务数量的均衡任务调度策略通过两个阶段完成任务到 TaskManager 的分配:

  • 第一阶段:任务到 Slot 的分配
  • 第二阶段:Slot 到 TaskManager 的分配

本节将通过两个示例来说明该策略在这两个阶段中的简化流程与原理。

第一阶段:任务到 Slot 的分配

以图 (c) 所示的作业为例,该作业包含 5 个 JobVertex,并行度分别为 14423,且它们均属于默认 Slot 共享组。

任务到 Slot 分配原理示意图

在任务到 Slot 的分配阶段,该调度策略执行以下操作:

  • 直接分配最高并行度顶点的任务:将并行度最高的顶点的第 i 个任务直接分配到第 i 个 Slot。即,任务 JV-Bi 直接分配到 sloti,任务 JV-Ci 直接分配到 sloti
  • 轮询分配其余顶点的任务:对于并行度低于最高并行度的其他顶点,在当前 Slot 共享组的各个 Slot 之间以轮询(Round-Robin)方式依次分配任务,直到所有任务分配完毕。

如图 (e) 所示,在基于任务数量的分配策略下,每个 Slot 中的任务数量范围(最大值与最小值之差)为 1,优于默认策略下图 (d) 中范围为 3 的情况。这确保了各 Slot 之间任务数量的更均衡分布。

第二阶段:Slot 到 TaskManager 的分配

如图 (f) 所示,给定一个包含两个顶点 JV-AJV-B 的 Flink 作业,并行度分别为 63,且两者共享同一个 Slot 共享组。

Slot 到 TaskManager 分配原理示意图

第一阶段分配完成后的结果如图 (g) 所示:Slot0Slot1Slot2 各包含 2 个任务,其余 Slot 各包含 1 个任务。

随后:

  • 该策略提交所有 Slot 请求,并等待当前作业所需的全部 Slot 资源就绪

一旦 Slot 资源就绪:

  • 该策略按 Slot 中包含的任务数量对所有 Slot 请求进行降序排序
  • 随后,依次将每个 Slot 请求分配给当前任务负载最小的 TaskManager,直到所有 Slot 请求分配完毕。

最终分配结果如图 (i) 所示,每个 TaskManager 恰好承载 3 个任务,TaskManager 之间的任务数量差异为 0。相比之下,在默认策略下(如图 (h) 所示),TaskManager 之间的任务数量差异为 2

因此,如果您遇到上述性能瓶颈问题,使用该负载均衡任务调度策略可以提升性能。但如果您没有遇到上述瓶颈,请不要使用该策略,否则可能导致性能下降。


使用方法

您可以通过以下配置项启用均衡任务调度策略:

  • taskmanager.load-balance.mode: tasks

注意:在故障恢复场景中,当资源被释放并处理资源请求时,资源视图的延迟更新可能导致分配结果不够均衡。此时,您可以通过适当增大 slot.request.max-interval 的值来改善这一情况。例如,可以每次尝试增加 50 毫秒进行调整。提高该值会使 Slot 请求和可用资源视图在作业调度期间更加稳定,从而使任务能够尽可能均衡地分配。但这也会相应延长任务调度阶段的整体时长,从而增加 slot.request.timeout 参数超时的风险。需要强调的是,如果在充分增大该选项值后仍出现非最优任务均衡的情况,可在 FLINK-38715 中报告,报告内容应包括调度相关配置的描述和观察到的现象。


更多详情

请参阅 FLIP-370 了解更多详情。


原文链接:Balanced Tasks Scheduling | Apache Flink