配置作业资源

更新时间:
复制 MD 格式

您可以在作业启动前配置作业资源或者作业上线后修改作业资源,支持基础模式(粗粒度)和专家模式(细粒度)两种资源模式。本文为您介绍如何配置作业资源,以及两种资源模式下的参数信息。

注意事项

资源配置后,需重启作业才能生效。

操作步骤

  1. 进入资源配置入口。

    1. 登录实时计算控制台

    2. 单击目标工作空间操作列下的控制台

    3. 运维中心 > 作业运维页面,单击目标作业名称。

    4. 部署详情页签,单击资源配置区域右侧的编辑

  2. 修改作业资源信息。

    支持基础模式(粗粒度)和专家模式(细粒度)两种资源配置模式。

    资源模式

    说明

    配置参数说明

    基础模式

    基础模式是一种静态资源分配方式,您只需要给定每个TM启动所需要的总资源(CPUJVM总内存),系统会根据每个TaskManager Slot数(即flink conf taskmanager.numberOfTaskSlots)均匀分配所有资源。对于大多数简单作业,粗粒度即可满足要求。

    基础模式(粗粒度)

    专家模式

    专家模式是一种动态资源分配方式,您可以配置每个Slot共享组(Slot Sharing Group,SSG)所需要的资源,Flink会计算出每个Slot需要的资源规格大小,动态地从可用资源池去申请完全匹配的TMSlot。对于复杂作业,粗粒度可能导致资源利用率低,因此需要细粒度资源对每个算子进行精细资源控制,从而提高资源使用率,满足作业吞吐的要求。

    说明

    SQL作业支持配置专家模式。

    专家模式(细粒度)

    关于TM、JM、TaskSlot等概念,详情请参见Apache Flink Architecture

  3. 单击保存

  4. 重启作业。

    作业资源配置后,需重启作业才能生效。

基础模式(粗粒度)

配置项

说明

并发度

作业全局并发数。

JobManager CPU

根据Flink最佳实践,单个JM内存资源需要至少配置为0.5 Core2 GiB,才能保证作业稳定运行。建议您配置为1 Core4 GiB。最大值为16 Core。

JobManager Memory

单位为GiB,最小值为2 GiB,最大值为64 GiB。若 JM 内存水位长期处于 80% 以上,存在 OOM 风险,建议增加内存。在同步大量数据至 Paimon 等场景下,若出现 JM Direct Buffer Memory OOM,建议将jobmanager.memory.off-heap.size从默认的 128 MB 调整至 512 MB 或更大,可在运行参数配置 > 其他配置中设置。

TaskManager CPU

根据Flink最佳实践,单个TM内存资源需要至少配置为0.5 Core2 GiB,才能保证作业稳定运行。建议您配置为1 Core4 GiB。最大值为16 Core。

TaskManager Memory

单位为GiB,最小值为2 GiB,最大值为64 GiB。

每个TaskManager Slot

请填写TMSlot数。

说明

在基础模式下,您配置的 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(JMTMCPU总和, JMTM的内存总和/4)

  • 实际TM数 = 并发度 / 每个TaskManager Slot

  • 实际每个TM上可分配的slot数 = 并发数 / 实际TM数。

说明
  • 计算比值需分别向上取整。

  • 资源配置默认情况下无法设置超过最大值。如果您需要设置大于默认TM内存和CPU的最大限制配置,请您提交工单

  • 您也可以在作业部署详情页签运行参数配置区域的其他配置中设置numberOfTaskSlots参数,和界面配置每个TaskManager Slot作用相同,但优先级更高。

例如,当并发度设置为12,每个TM Slot数设置为4。

此示例中,Job Manager CPU2 Core,Job Manager Memory4 GiB,Task Manager CPU2 Core,Task Manager Memory4 GiB。

Flink开发控制台,您会看到实际的TaskManager数为3,每个TaskManager Slot数为4。

实际的TM数和每个TMSlot数的推算过程如下:

  1. 实际TM数 = [设置的并发度/设置的每个TaskManager Slot数] = [12/4] = 3。

  2. 实际TMSlot数=[并发数/实际TM数] = [12/3]= 4。

专家模式(细粒度)

说明
  • SQL作业支持配置专家模式。

  • 在部署作业后,若对SQL或者资源配置进行了修改,需要重新生成资源计划图,以确保作业能够正常启动。

配置基础资源

配置项

说明

JobManager CPU

根据Flink最佳实践,单个JM内存资源需要至少配置为0.25 Core1 GiB,才能保证作业稳定运行,最大值16 Core。

JobManager Memory

单位为GiB,例如,4 GiB。最小值为1 GiB,最大值64 GiB。

每个TaskManager Slot

无。

配置Slot资源

  1. 专家模式下,单击立刻获取,获取资源计划图。

  2. 单击Slot框上的编辑图标。生成的资源计划图中显示多个SLOT框,每个框内包含VERTEX算子信息及PARALLELISM值。

  3. 修改Slot配置信息。对话框中可配置CPUHeap MemoryOff-Heap Memory并发数参数。

    此处设置的并发数为该Slot共享组内所有算子的统一并发数。设置完成后,系统将自动进行以下操作:

    • 系统将自动为该Slot共享组内的所有算子设置相同的并发数。

    • 系统会根据作业的计算逻辑按需自动生成Statebackend、PythonOperator所需的内存,无需您手动进行配置。

    • 说明

      在专家模式下,对话框中支持配置的内存仅为 Heap MemoryOff-Heap Memory。除此之外,JVM Overhead 等其他内存组件由系统按默认比例自动分配,并非按需动态申请。若默认比例导致内存不足(例如作业出现 Metaspace OOM 或 GC 开销过高),可在运行参数配置 > 其他配置中手动调整以下参数:

      • 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节点并发度和分区数成比例,即并发度数能整除分区数。例如Kafka16个分区,则并发度建议设置为16、84,这样可以避免数据倾斜。同时Source节点的并发度不宜设置太小,避免一个Source需要读取太多数据,导致出现入口瓶颈,影响作业吞吐。

      • 建议按需配置除Source外的其他节点的并发度。流量大的节点,并发设置大一些;流量小的节点,并发设置小一些。

      • 建议在有明确异常或者需求时,再调整Heap MemoryOff-heap Memory的大小,例如作业出现OOM或严重GC等。因为在作业正常运行时,调整Heap MemoryOff-heap Memory的大小,不会明显改变作业的吞吐量。

  4. 单击确定

配置算子资源

默认情况下,所有算子都放在一个Slot共享组内,因此您无法为每个算子单独修改资源配置。如果您需要对单独的算子设置资源,需要开启SSG模式后让每个算子有自己独立的Slot,这样就可以直接在对应的Slot上设置算子的资源。具体的算子资源设置步骤如下:

  1. 在作业部署详情页签资源配置区域,单击编辑后,资源模式选择为专家模式

  2. (可选)如果暂无资源计划,单击立刻获取

    生成的资源计划图中,默认所有算子位于同一个SLOT框内。

  3. 打开SSG模式开关后,单击重新生成

    此时一个共享组内的算子被拆分为单个Slot。

  4. 单击目标算子对应Slot框上的编辑图标后,修改算子资源。

    修改SLOT对话框中可配置CPUHeap MemoryOff-Heap Memory并发数参数。

  5. 单击确定

配置算子并发、Chain策略和TTL

说明

仅实时计算引擎VVR 8.0.7及以上版本支持配置算子TTL。

支持配置单个算子的并发数、Chaining策略和算子State过期时间(TTL)。

  1. 单击目标VERTEX框上的image展开VERTEX。

    展开后的VERTEX框内显示各个算子节点及其PARALLELISM值,每个算子旁有编辑图标。

    说明

    您可以单击目标VERTEX上的编辑图标,批量设置对应VERTEX下的算子并发数。

  2. 单击算子的image图标。

  3. 配置算子资源。

    参数说明如下:

    参数

    说明

    并发数

    对应算子的并发数。

    Chaining策略

    Chain是指多个算子被连接在一起形成的逻辑计算链。它能够提高作业的执行效率和性能,减少数据在算子之间的传输和序列化开销。不过有时可能需要将Chain断开,以便更好地控制作业的执行流程和性能。支持配置策略如下:

    • ALWAYS(默认值):算子始终可以和上下游算子Chain一起。

    • HEAD:当前算子作为Chain的头节点,只和上游算子断开Chain,下游节点仍和当前算子Chain在一起。

    • NEVER:当前算子不会与上下游算子进行Chain。

    算子State过期时间设置(TTL)

    支持设置秒、分钟、小时和天为单位的过期时间。默认为作业的过期时间(未设置过期时间的作业默认为1.5天,作业过期时间配置请参见运行参数配置)。

    说明
    • 仅实时计算引擎VVR 8.0.7及以上版本支持。

    • 仅有状态算子支持配置过期时间。

    • State 过期时间为近似清理机制,系统不保证在 TTL 到期后立即清除过期数据。实际清理时间取决于后台的状态访问和清理策略。

  4. 单击确定

常见问题

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 命令动态设置全局并发度。请使用以下方式修改并发度:

  1. 部署详情页签资源配置区域,单击编辑后修改并发度配置。

  2. 或在 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)进行测试优化。

相关文档