您可以在作业启动前配置作业资源或者作业上线后修改作业资源,支持基础模式(粗粒度)和专家模式(细粒度)两种资源模式。本文为您介绍如何配置作业资源,以及两种资源模式下的参数信息。
注意事项
资源配置后,需重启作业才能生效。
操作步骤
-
进入资源配置入口。
-
登录实时计算控制台。
-
单击目标工作空间操作列下的控制台。
-
在页面,单击目标作业名称。
-
在部署详情页签,单击资源配置区域右侧的编辑。
-
-
修改作业资源信息。
支持基础模式(粗粒度)和专家模式(细粒度)两种资源配置模式。
资源模式
说明
配置参数说明
基础模式
基础模式是一种静态资源分配方式,您只需要给定每个TM启动所需要的总资源(CPU和JVM总内存),系统会根据每个TaskManager Slot数(即flink conf taskmanager.numberOfTaskSlots)均匀分配所有资源。对于大多数简单作业,粗粒度即可满足要求。
专家模式
专家模式是一种动态资源分配方式,您可以配置每个Slot共享组(Slot Sharing Group,SSG)所需要的资源,Flink会计算出每个Slot需要的资源规格大小,动态地从可用资源池去申请完全匹配的TM和Slot。对于复杂作业,粗粒度可能导致资源利用率低,因此需要细粒度资源对每个算子进行精细资源控制,从而提高资源使用率,满足作业吞吐的要求。
说明仅SQL作业支持配置专家模式。
关于TM、JM、Task或Slot等概念,详情请参见Apache Flink Architecture。
-
单击保存。
-
重启作业。
作业资源配置后,需重启作业才能生效。
基础模式(粗粒度)
|
配置项 |
说明 |
|
并发度 |
作业全局并发数。 |
|
JobManager CPU |
根据Flink最佳实践,单个JM内存资源需要至少配置为0.5 Core和2 GiB,才能保证作业稳定运行。建议您配置为1 Core和4 GiB。最大值为16 Core。 |
|
JobManager Memory |
单位为GiB,最小值为2 GiB,最大值为64 GiB。若 JM 内存水位长期处于 80% 以上,存在 OOM 风险,建议增加内存。在同步大量数据至 Paimon 等场景下,若出现 JM Direct Buffer Memory OOM,建议将 |
|
TaskManager CPU |
根据Flink最佳实践,单个TM内存资源需要至少配置为0.5 Core和2 GiB,才能保证作业稳定运行。建议您配置为1 Core和4 GiB。最大值为16 Core。 |
|
TaskManager Memory |
单位为GiB,最小值为2 GiB,最大值为64 GiB。 |
|
每个TaskManager Slot数 |
请填写TM的Slot数。 |
在基础模式下,您配置的 TaskManager Memory 是 TM 进程总内存(Total Process Memory),其中 JVM Overhead 内存由系统按默认比例自动分配(参数taskmanager.memory.jvm-overhead.fraction,默认值为0.1,即占 TM 总内存的 10%)。需注意,操作系统统计的 RSS(Resident Set Size)不包含 Page Cache,建议在 TM 总内存基础上,至少预留 400 MB 供操作系统 Page Cache 使用,以避免因内存争抢触发 OOM。如需调整 JVM Overhead 比例,可在中设置taskmanager.memory.jvm-overhead.fraction参数。
您可以根据以下公式进行推算:
-
作业所配置的CU数 = MAX(JM和TM的CPU总和, JM和TM的内存总和/4)
-
实际TM数 = 并发度 / 每个TaskManager Slot数
-
实际每个TM上可分配的slot数 = 并发数 / 实际TM数。
-
计算比值需分别向上取整。
-
资源配置默认情况下无法设置超过最大值。如果您需要设置大于默认TM内存和CPU的最大限制配置,请您提交工单。
-
您也可以在作业部署详情页签运行参数配置区域的其他配置中设置numberOfTaskSlots参数,和界面配置每个TaskManager Slot数作用相同,但优先级更高。
例如,当并发度设置为12,每个TM Slot数设置为4。
此示例中,Job Manager CPU为2 Core,Job Manager Memory为4 GiB,Task Manager CPU为2 Core,Task Manager Memory为4 GiB。
在Flink开发控制台,您会看到实际的TaskManager数为3,每个TaskManager Slot数为4。
实际的TM数和每个TM的Slot数的推算过程如下:
-
实际TM数 = [设置的并发度/设置的每个TaskManager Slot数] = [12/4] = 3。
-
实际TM的Slot数=[并发数/实际TM数] = [12/3]= 4。
专家模式(细粒度)
-
仅SQL作业支持配置专家模式。
-
在部署作业后,若对SQL或者资源配置进行了修改,需要重新生成资源计划图,以确保作业能够正常启动。
配置基础资源
|
配置项 |
说明 |
|
JobManager CPU |
根据Flink最佳实践,单个JM内存资源需要至少配置为0.25 Core和1 GiB,才能保证作业稳定运行,最大值16 Core。 |
|
JobManager Memory |
单位为GiB,例如,4 GiB。最小值为1 GiB,最大值64 GiB。 |
|
每个TaskManager Slot数 |
无。 |
配置Slot资源
-
在专家模式下,单击立刻获取,获取资源计划图。
-
单击Slot框上的
图标。生成的资源计划图中显示多个SLOT框,每个框内包含VERTEX算子信息及PARALLELISM值。 -
修改Slot配置信息。对话框中可配置CPU、Heap Memory、Off-Heap Memory和并发数参数。
此处设置的并发数为该Slot共享组内所有算子的统一并发数。设置完成后,系统将自动进行以下操作:
-
系统将自动为该Slot共享组内的所有算子设置相同的并发数。
-
系统会根据作业的计算逻辑按需自动生成Statebackend、Python和Operator所需的内存,无需您手动进行配置。
-
taskmanager.memory.jvm-overhead.fraction:JVM Overhead 占 TM 总内存的比例,默认值为0.1 -
taskmanager.memory.jvm-overhead.min:JVM Overhead 的最小值 -
taskmanager.memory.jvm-overhead.max:JVM Overhead 的最大值 -
建议Source节点并发度和分区数成比例,即并发度数能整除分区数。例如Kafka有16个分区,则并发度建议设置为16、8或4,这样可以避免数据倾斜。同时Source节点的并发度不宜设置太小,避免一个Source需要读取太多数据,导致出现入口瓶颈,影响作业吞吐。
-
建议按需配置除Source外的其他节点的并发度。流量大的节点,并发设置大一些;流量小的节点,并发设置小一些。
-
建议在有明确异常或者需求时,再调整Heap Memory和Off-heap Memory的大小,例如作业出现OOM或严重GC等。因为在作业正常运行时,调整Heap Memory和Off-heap Memory的大小,不会明显改变作业的吞吐量。
说明在专家模式下,对话框中支持配置的内存仅为 Heap Memory 和 Off-Heap Memory。除此之外,JVM Overhead 等其他内存组件由系统按默认比例自动分配,并非按需动态申请。若默认比例导致内存不足(例如作业出现 Metaspace OOM 或 GC 开销过高),可在中手动调整以下参数:
说明 -
-
单击确定。
配置算子资源
默认情况下,所有算子都放在一个Slot共享组内,因此您无法为每个算子单独修改资源配置。如果您需要对单独的算子设置资源,需要开启多SSG模式后让每个算子有自己独立的Slot,这样就可以直接在对应的Slot上设置算子的资源。具体的算子资源设置步骤如下:
-
在作业部署详情页签资源配置区域,单击编辑后,资源模式选择为专家模式。
-
(可选)如果暂无资源计划,单击立刻获取。
生成的资源计划图中,默认所有算子位于同一个SLOT框内。
-
打开多SSG模式开关后,单击重新生成。
此时一个共享组内的算子被拆分为单个Slot。
-
单击目标算子对应Slot框上的
图标后,修改算子资源。修改SLOT对话框中可配置CPU、Heap Memory、Off-Heap Memory和并发数参数。
-
单击确定。
配置算子并发、Chain策略和TTL
仅实时计算引擎VVR 8.0.7及以上版本支持配置算子TTL。
支持配置单个算子的并发数、Chaining策略和算子State过期时间(TTL)。
-
单击目标VERTEX框上的
展开VERTEX。展开后的VERTEX框内显示各个算子节点及其PARALLELISM值,每个算子旁有编辑图标。
说明您可以单击目标VERTEX上的
图标,批量设置对应VERTEX下的算子并发数。 -
单击算子的
图标。 -
配置算子资源。
参数说明如下:
参数
说明
并发数
对应算子的并发数。
Chaining策略
Chain是指多个算子被连接在一起形成的逻辑计算链。它能够提高作业的执行效率和性能,减少数据在算子之间的传输和序列化开销。不过有时可能需要将Chain断开,以便更好地控制作业的执行流程和性能。支持配置策略如下:
-
ALWAYS(默认值):算子始终可以和上下游算子Chain一起。
-
HEAD:当前算子作为Chain的头节点,只和上游算子断开Chain,下游节点仍和当前算子Chain在一起。
-
NEVER:当前算子不会与上下游算子进行Chain。
算子State过期时间设置(TTL)
支持设置秒、分钟、小时和天为单位的过期时间。默认为作业的过期时间(未设置过期时间的作业默认为1.5天,作业过期时间配置请参见运行参数配置)。
说明-
仅实时计算引擎VVR 8.0.7及以上版本支持。
-
仅有状态算子支持配置过期时间。
-
State 过期时间为近似清理机制,系统不保证在 TTL 到期后立即清除过期数据。实际清理时间取决于后台的状态访问和清理策略。
-
-
单击确定。
常见问题
Q:设置并发度(Parallelism)是否等于占用相同数量的 CU?
A:不等于。并发度(Parallelism)代表并发任务数(Task),不直接等于 CU 消耗量。总 CU 消耗量由以下公式决定:
总 CU 消耗 = 并发度(Parallelism)× 每个 Task 分配的 CU 数
每个 Task 占用的 CU 数取决于作业配置中每个 Slot 的资源规格(CPU 和内存)。增加并发度会增加 CU 占用,但并非 1:1 的关系。例如,当每个 Slot 配置为 1 Core 和 4 GiB 时,根据 CU = MAX(CPU 总和, 内存总和/4) 公式,1 个 Slot 消耗 1 个 CU;并发度为 10 时,总消耗约 10 个 CU(实际以 TM 总资源计算为准)。
Q:为什么 SQL 作业中SET 'parallelism.default' = 'N'配置不生效?
A:在实时计算 Flink 版中,通过SET 'parallelism.default' = 'N'设置并发度的方式无效,平台不支持通过 SET 命令动态设置全局并发度。请使用以下方式修改并发度:
-
在部署详情页签资源配置区域,单击编辑后修改并发度配置。
-
或在 SQL 语句的 WITH 参数中,针对特定算子设置并发度。
Q:增加 Print Sink 或 Join 算子后,作业出现资源不足或性能差,怎么办?
A:请根据具体场景参考以下建议:
-
增加 Print Sink 后 TM 资源不足:Print Sink 会增加额外的计算和 I/O 开销,无法仅靠调整参数解决。建议根据实际数据量评估并增加 TM 资源(CPU 和内存)。同时检查源表字段类型是否正确(例如数值型字段建议使用
BIGINT类型),避免因类型不匹配产生额外转换开销。 -
Join 任务内存使用率不高但性能差:除开启 mini-batch 优化外,主要提升方式是增加计算资源(CU)。若作业存在数据倾斜,单纯增加资源效果有限,需先排查并解决数据倾斜问题。
-
作业频繁重启且延迟高:若处于无状态重启后的全量同步阶段,可尝试将每个TaskManager Slot数设为 1,仅通过并发度调整并行度,选用 1 Core 4 GiB 的规格配合适当并发数(如 10)进行测试优化。
相关文档
-
资源优化技巧,详情请参见高性能Flink SQL优化技巧。
-
如果不想手动调节资源,可以使用自动调优,系统会自动完成资源调节,详情请参见配置自动调优。
-
作业的基础配置、运行参数配置和日志配置,详情请参见配置作业部署信息。
-
您可以通过Flink Advisor作业智能诊断服务帮您监控作业健康状况,详情请参见作业智能诊断。