Flink全托管支持自动调优和定时调优两种调优模式。本文为您介绍如何配置自动调优和定时调优,以及配置过程中的注意事项。
背景信息
通常,您需要花费大量的时间进行作业调优。例如,新上线一个作业时,需要考虑如何配置该作业的资源、并发个数、Task Manager个数及大小等。此外,作业运行过程中,还需要考虑如何调整作业资源,使作业处于最高资源利用率;作业出现反压或延时增大的情况时,需要考虑如何调整作业配置等。您可以根据以下信息,选择合适的调优模式。
调优模式 | 适用场景 | 使用优势 | 相关文档 |
---|---|---|---|
未开启(默认模式) | 不配置自动调优或定时调优,但想简单的优化下作业资源。 | 可以直接使用未开启下的资源建议来手动调整作业资源。 因为资源调优系统根据作业运行情况,给出资源调整建议,但是并不自动应用优化建议,需要您根据情况手动处理。 | 无。 |
自动调优 | 某作业X,使用资源30 CU,上线平稳运行一段后,发现在Source无延迟、无反压的情况下,作业的CPU和内存使用率有时会很低。 此时如果您不想人工调节资源,需要系统自动完成资源地调节,可以使用自动调优功能。系统将在资源使用率比较低时,自动降低资源配置,在资源使用率提高达到一定阈值时,再自动提高资源配置。 |
|
|
定时调优 | 某作业Y,根据业务的特点,有明显的时间区间特征。例如,全天早09:00~19:00是业务高峰,19:00到第二天09:00是业务低峰。 此时您可以使用定时调优功能,在高峰时间段使用30 CU,在业务低峰时使用10 CU。 说明 您需要明确知道各个时间段的资源使用情况。 | 配置定时调优策略,请参见开启并配置定时调优。 |
使用限制
- 在开启unaligned checkpoint时,不支持调整并发。
- 自动调优不支持Session集群部署的作业。
- 自动调优无法解决流作业所有的性能瓶颈。流作业性能问题是由上下游共同决定的,如果是Flink出现了瓶颈,可以通过Flink资源调优解决。但调优策略对作业的处理模式是基于一定的假设的。例如,流量平滑变化、不能有数据倾斜、每个算子的吞吐能力能够随并发度的升高而线性拓展。当业务逻辑严重偏离以上假设时,作业可能会存在异常。例如:
- 无法触发修改并发度的操作、作业不能达到正常状态和作业持续重启等。
- 自定义标量函数UDF、自定义聚合函数UDAF或自定义表值函数UDTF性能问题。
- 自动调优无法识别外部系统的问题。如果出现外部系统问题,您需要自行解决。外部系统故障或访问变慢时,会导致作业并行度增大,加重外部系统的压力,导致外部系统雪崩。常见的外部系统问题如下:
- 数据总线DataHub分区不足或消息队列MQ吞吐量不足。
- Sink性能问题。
- 云数据库RDS死锁。
注意事项
- 自动调优触发后需要重启作业,因此会导致作业短暂停止处理数据。
- 连续两次自动调优触发间隔为10分钟,您可以通过cooldown.minutes参数来调节触发自动调优的时间间隔。
- 如果您使用了DataStream作业或SQL自定义的Connector,请确认作业代码中未配置作业并行度,否则自动调优将无法调整作业资源,即自动调优配置无法生效。
- 新策略的触发时间和已有策略的触发时间间隔不能在半小时之内,否则新策略无法创建。
自动调优默认调优行为
如果您开启了自动调优,则系统默认会从并发度和内存两个方面为您进行自动调优:
- 自动调优会调整作业的并发度来满足作业流量变化所需要的吞吐。自动调优会监控消费源头数据的延迟变化情况、TaskManager(TM) CPU实际使用率和各个算子处理数据能力来调整作业的并发度。详情如下:
- 作业延迟Delay指标正常(不超过60s),不修改当前作业并发。
- 作业延迟Delay指标超过默认阈值60s,分以下两种情况来调整并发度:
- 延迟正在下降,不进行并发度调整。
- 延迟增加并且连续上升3分钟(默认值), 默认调整作业并发度到当前实际TPS的两倍,但不超过设置最大的资源(默认值为64 CU)。
- 作业不存在延迟指标。
- 作业某VERTEX节点连续6分钟实际处理数据时间占比超过80%,调大作业并发度使得SLOT使用率降低到50%,但不超过设置最大的资源(默认为64 CU)。
- 所有TM的平均利用率连续6分钟超过80%,调高并发度使TM的CPU使用率降低到50%。
- 所有TM的最大CPU使用率连续24小时低于20%,且VERTEX的实际处理数据时间低于20%时,调低作业的并发度使CPU和VERTEX实际处理的时间占比提高到50%。
- 自动调优也会监控作业的内存使用和Failover情况,来调整作业的内存配置。详情如下:
- 在JobManager GC频繁或者发生OOM异常时,会调高JM的内存,默认最大调整到16 GiB。
- 在TM GC频繁或者发生OOM异常、HeartBeatTimeout异常时,会调高TM的内存,默认最大调整到16 GiB。
- 在TM内存使用率超过95%时,会调大TM的内存。
- 在TM的实际内存使用率连续24小时低于30%时,降低TM内存的配置,默认最小调整到1.6 GiB。
开启并配置自动调优
- 进入自动调优开启并配置页面。
- 登录实时计算控制台。
- 在Flink全托管页签,单击目标工作空间操作列下的控制台。
- 在作业运维页面,单击目标作业名称。
- 在自动调优页签,单击调优配置。
- 单击调优模式右侧的编辑。
- 在调优模式的下拉列表中,选择自动调优。
- 单击保存。
- 填写自动调优相关参数。
相关的参数详情如下表所示。
参数 说明 调整间隔时间(分钟) 作业调优重启生效一次之后,下一次再进行调优的时间间隔。 最大资源限制 作业自动调整资源可以扩容的最大资源上限,单位为CU。 更多参数配置 您可以配置的参数列表如下: - mem.scale-down.interval:调低内存时最小触发时间间隔。
默认值为24小时。24小时内,检测内存使用率如果小于阈值,则会降低内存,或建议降低内存。
- parallelism.scale.max:并发度向上调整时,最大并发限制。
默认值为-1,表示最大并发没有限制。
- parallelism.scale.min:并发度向下调整时,最小并发限制。
默认值为1,表示最小并发为1。
- delay-detector.scale-up.threshold:可以容忍的最大延迟阈值。基于消费数据源头的延迟,来衡量作业处理吞吐的能力。
默认值为1分钟。当数据处理能力不足延迟超过1分钟,则会通过Scale Up方式来提高作业的吞吐能力,Scale Up方式包括增加并发或者拆Chain,或建议Scale Up。
- slot-usage-detector.scale-up.threshold:当VERTEX处理数据时间占比大于该值时,触发调大并发度的操作。
默认值为0.8。监控数据处理节点(不包括Source节点)空闲时间。当持续大于阈值0.8时,降低作业的并行度以降低资源使用,或建议Scale Up。
- slot-usage-detector.scale-down.threshold:当VERTEX处理数据时间占比大于该值时,触发调小并发度的操作。
默认值为0.2。监控数据处理节点(不包括Source节点)空闲时间。当持续小于阈值0.2时,提升作业的并行度以提升处理能力,或建议Scale Down。
- slot-usage-detector.scale-up.sample-interval:监控slot空闲指标的时间间隔,以便计算该时间间隔的平均值。
默认值为3分钟,与slot-usage-detector.scale-up.threshold和slot-usage-detector.scale-down.threshold结合使用。当3分钟内的空闲时间平均值大于0.8或者小于0.2时,则进行scale-up或者scale-down。
- resources.memory-scale-up.max:调整单个Task Manager和Job Manager的内存时,能调整到的最大值。
默认值为16 GiB。TM和JM进行自动调优或调大并发时,内存的上限为16 GiB。
- mem.scale-down.interval:调低内存时最小触发时间间隔。
- 单击保存更改。开启后,您会看到作业名称左侧的SQL图标会变为
。
如果您需要关闭已开启的自动调优,则可以在调优模式中,选择未开启,单击保存。
开启并配置定时调优
配置示例
全天09:00~19:00是业务高峰,在高峰时间段使用30 CU。19:00到第二天09:00是业务低峰,在业务低峰时使用10 CU。该场景的调优策略配置结果如下图所示。

具体的配置步骤详情如下:
- 高峰基础配置如下图所示。
- 高峰资源配置如下图所示。
- 低峰基础配置如下图所示。
- 低峰资源配置如下图所示。