您可以在作业启动前配置作业资源或者作业上线后修改作业资源,支持基础模式(粗粒度)和专家模式(细粒度)两种资源模式。本文为您介绍如何配置作业资源,以及两种资源模式下的参数信息。
注意事项
资源配置后,需重启作业才能生效。
操作步骤
进入资源配置入口。
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在
页面,单击目标作业名称。在部署详情页签,单击资源配置区域右侧的编辑。
修改作业资源信息。
支持基础模式(粗粒度)和专家模式(细粒度)两种资源配置模式。
资源模式
说明
配置参数说明
基础模式
粗粒度是一种静态资源分配方式,您只需要给定每个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。 |
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数。 |
您可以根据以下公式进行推算:
作业所配置的CU数 = MAX(JM和TM的CPU总和, JM和TM的内存总和/4)。
每个作业所需IP数 = JM数(每个作业只有一个)+实际TM数。
实际TM数= MAX(⌈总CPU数/TM的CPU默认最大值⌉,⌈总内存数/TM的内存默认最大值⌉)。
总CPU数=设置的并发度/设置的每个TaskManager Slot数*设置的单个TM CPU。
总内存数=设置的并发度/设置的每个TaskManager Slot数*设置的单个TM的内存。
TM的CPU默认最大值为16 Core。
TM的内存默认最大值为64 GiB。
实际每个TM上可分配的slot数 = ⌈设置的并发数/实际TM数⌉。
例如,当并发度设置为80,每个TM Slot数设置为20,每个TM CPU设置为22 Core,每个TM 内存设置为30 GiB时,配置如下图所示。
在Flink开发控制台,您会看到实际的TaskManager数为6,每个TaskManager Slot数为14。
实际的TM数和每个TM的Slot数的推算过程如下:
实际TM数 =MAX(⌈总CPU数/TM的CPU默认最大值⌉,⌈总内存数/TM的内存默认最大值⌉)= MAX(⌈设置的并发数/单个TM的Slot数量*设置的单个TM CPU/16⌉,⌈设置的并发数/单个TM的Slot数量*设置的单个TM的内存/64⌉)= MAX(⌈80/20*22/16⌉,⌈80/20*30/64⌉)= MAX(⌈88/16⌉,⌈120/64⌉)= MAX(6,2) = 6。
实际TM的Slot数=⌈并发数/实际TM数⌉ = ⌈80/6⌉=14。
实际TM的推算逻辑需要您设置的TM的CPU和内存大于其最大默认值,才可有效。
计算比值需分别向上取整。
如果您需要提高默认TM内存和CPU的最大值,请您提交工单。
您也可以在作业部署详情页签运行参数配置区域的其他配置中设置numberOfTaskSlots参数,和界面配置每个TaskManager Slot数作用相同,但优先级更高。
专家模式(细粒度)
仅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配置信息。
此处设置的并发数为该Slot共享组内所有算子的统一并发数。设置完成后,系统将自动进行以下操作:
系统将自动为该Slot共享组内的所有算子设置相同的并发数。
系统会根据作业的计算逻辑按需自动生成Statebackend、Python和Operator所需的内存,无需您手动进行配置。
建议Source节点并发度和分区数成比例,即并发度数能整除分区数。例如Kafka有16个分区,则并发度建议设置为16、8或4,这样可以避免数据倾斜。同时Source节点的并发度不宜设置太小,避免一个Source需要读取太多数据,导致出现入口瓶颈,影响作业吞吐。
建议按需配置除Source外的其他节点的并发度。流量大的节点,并发设置大一些;流量小的节点,并发设置小一些。
建议在有明确异常或者需求时,再调整Heap Memory和Off-heap Memory的大小,例如作业出现OOM或严重GC等。因为在作业正常运行时,调整Heap Memory和Off-heap Memory的大小,不会明显改变作业的吞吐量。
说明单击确定。
配置算子资源
默认情况下,所有算子都放在一个Slot共享组内,因此您无法为每个算子单独修改资源配置。如果您需要对单独的算子设置资源,需要开启多SSG模式后让每个算子有自己独立的Slot,这样就可以直接在对应的Slot上设置算子的资源。具体的算子资源设置步骤如下:
在作业部署详情页签资源配置区域,单击编辑后,资源模式选择为专家模式。
(可选)如果暂无资源计划,单击立刻获取。
打开多SSG模式开关后,单击重新生成。
此时一个共享组内的算子被拆分为单个Slot。
单击目标算子对应Slot框上的图标后,修改算子资源。
单击确定。
配置算子并发、Chain策略和TTL
仅实时计算引擎VVR 8.0.7及以上版本支持配置算子TTL。
支持配置单个算子的并发数、Chaining策略和算子State过期时间(TTL)。
单击目标VERTEX框上的展开VERTEX。
说明您可以单击目标VERTEX上的图标,批量设置对应VERTEX下的算子并发数。
单击算子的图标。
配置算子资源。
参数说明如下:
参数
说明
并发数
对应算子的并发数。
Chaining策略
Chain是指多个算子被连接在一起形成的逻辑计算链。它能够提高作业的执行效率和性能,减少数据在算子之间的传输和序列化开销。不过有时可能需要将Chain断开,以便更好地控制作业的执行流程和性能。支持配置策略如下:
ALWAYS(默认值):算子始终可以和上下游算子Chain一起。
HEAD:当前算子作为Chain的头节点,只和上游算子断开Chain,下游节点仍和当前算子Chain在一起。
NEVER:当前算子不会与上下游算子进行Chain。
算子State过期时间设置(TTL)
支持设置秒、分钟、小时和天为单位的过期时间。默认为作业的过期时间(未设置过期时间的作业默认为1.5天,作业过期时间配置请参见运行参数配置)。
说明仅实时计算引擎VVR 8.0.7及以上版本支持。
仅有状态算子支持配置过期时间。
单击确定。
相关文档
资源优化技巧,详情请参见高性能Flink SQL优化技巧。
如果不想手动调节资源,可以使用自动调优,系统会自动完成资源调节,详情请参见配置自动调优。
作业的基础配置、运行参数配置和日志配置,详情请参见配置作业部署信息。
您可以通过Flink Advisor作业智能诊断服务帮您监控作业健康状况,详情请参见作业智能诊断。