配置自动调优

Flink作业支持智能调优和定时调优两种自动调优模式。本文为您介绍如何配置智能调优和定时调优,以及配置过程中的注意事项。

背景信息

通常,您需要花费大量的时间进行作业调优。例如,新上线一个作业时,需要考虑如何配置该作业的资源、并发个数、Task Manager个数及大小等。此外,作业运行过程中,还需要考虑如何调整作业资源,使作业处于最高资源利用率;作业出现反压或延时增大的情况时,需要考虑如何调整作业配置等。实时计算Flink版提供了自动调优功能,您可以根据以下信息,选择合适的调优模式。

调优模式

适用场景

使用优势

相关文档

智能调优

某作业使用资源30 CU,上线平稳运行一段时间后,发现在Source无延迟、无反压的情况下,作业的CPU和内存使用率有时会很低。

此时如果您不想人工调节资源,需要系统自动完成资源调节,可以使用智能调优模式。系统将在资源使用率比较低时,自动降低资源配置,在资源使用率提高到一定阈值时,再自动提高资源配置。

  • 帮您更合理地调整作业并发度和资源配置。

  • 全局优化您的作业,解决作业吞吐量不足、全链路存在反压和资源浪费等各种性能调优问题。

定时调优

定时调优计划描述了资源和时间点的对应关系,一个定时调优计划中可以包含多组资源和时间点的关系。

在使用定时调优计划时,您需要明确知道各个时间段的资源使用情况,根据业务时间区间特征,设置对应的资源。

例如,某业务全天早09:00~19:00是业务高峰,19:00到第二天09:00是业务低峰。此时您可以使用定时调优功能,在高峰时间段使用30 CU,在业务低峰时使用10 CU。

配置定时调优策略,请参见开启并配置定时调优

使用限制

  • 最多创建20个资源计划。

  • 定时调优和智能调优模式互斥,如果您应用了任何一种调优模式,则无法应用另外一种。如果您需要应用另外一种调优模式,则需要先停止正在应用的调优模式。

  • 定时调优中的定时计划互斥,如果您应用了某个定时计划,则无法应用其他定时调优计划。如果您需要应用其他定时调优计划,则需要先停止正在应用的定时调优计划。

  • 在开启unaligned checkpoint时,不支持调整并发。

  • 智能调优不支持Session集群部署的作业。

  • 智能调优无法解决流作业所有的性能瓶颈。

    流作业性能问题是由上下游共同决定的,如果是Flink出现了瓶颈,可以通过Flink资源调优解决。但调优策略对作业的处理模式是基于一定的假设的。例如,流量平滑变化、不能有数据倾斜、每个算子的吞吐能力能够随并发度的升高而线性拓展。当业务逻辑严重偏离以上假设时,作业可能会存在异常。例如:

    • 无法触发修改并发度的操作、作业不能达到正常状态和作业持续重启等。

    • 自定义标量函数UDF、自定义聚合函数UDAF或自定义表值函数UDTF性能问题。

  • 智能调优无法识别外部系统的问题。如果出现外部系统问题,您需要自行解决。

    外部系统故障或访问变慢时,会导致作业并发度增大,加重外部系统的压力,导致外部系统雪崩。常见的外部系统问题如下:

    • 数据总线DataHub分区不足或消息队列RocketMQ吞吐量不足。

    • Sink性能问题。

    • 云数据库RDS死锁。

  • 智能调优和定时调优都支持基础模式和专家模式。

注意事项

  • 任何模式的调优使作业重启时,会导致作业短暂停止数据。

    说明

    VVR 8.0.1及以上版本,Flink系统会先尝试使用动态参数更新重启作业,再尝试使用作业整体重启。动态参数更新下业务中断时间较之作业整体重启缩小30%-98%,具体依赖于作业状态和逻辑,目前仅支持并发的修改。详情请参见动态扩缩容与参数动态更新

  • 如果您使用了DataStream作业或SQL自定义的连接器,请确认作业代码中未配置作业并发度,否则智能调优和定时调优将无法调整作业资源,即自动调优配置无法生效。

开启并配置智能调优

  1. 进入智能调优开启和配置页面。

    1. 登录实时计算控制台

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

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

    4. 自动调优页签,单击智能调优模式

  2. 打开自动调优开关。

    开启后,在自动调优页签页面顶部会显示智能调优应用中。如果您需要关闭已开启的智能调优,则可以单击关闭智能调优或者关闭自动调优右侧的开关。

  3. 单击调优配置右侧的编辑后,修改智能调优相关参数。

    参数

    说明

    调优策略

    • 平稳策略:通过应用该策略,系统会寻找适合整个运行周期的固定资源或定时计划,并根据整个周期作业的运行情况来调整作业资源,从而减少启停行为对作业的影响。这样做可以使作业的运行趋于稳定,减少不必要的变动和波动,最终达到收敛状态。

      说明

      只有找到更适合整个周期的资源配置,才会动态调整,否则不会修改已有资源。

    • 自适应策略:应用该策略后,系统会根据实时作业资源和指标信息动态修改资源配置,更加关注当前作业的延时和资源使用情况,并根据相关指标的变化更快速地优化资源适配。这样做可以使系统更加敏锐地响应作业需求,提高资源配置的效率和适应性。

    调整间隔时间(分钟)

    作业调优重启生效一次之后,下一次再进行调优的时间间隔。

    最大CPU限制

    作业自动调整资源可以扩容的最大CPU上限,不同的调优策略的默认值不同。

    最大内存限制

    作业自动调整资源可以扩容的最大内存上限,不同的调优策略的默认值不同。

    更多参数配置

    平稳策略和自适应策略,都可以配置如下参数:

    • mem.scale-down.interval:调低内存时最小触发时间间隔。

      默认值为24小时。24小时内,检测内存使用率如果小于阈值,则会降低内存,或建议降低内存。

    • parallelism.scale.max:并发度向上调整时,最大并发限制。

      默认值为-1,表示最大并发没有限制。

      说明

      对于消息队列类产品(例如Kafka,MQ,SLS等),自动调优并发的调整会受到分区数的影响,无法超过该上限。即如果您设置的并发度最大值超过其分区数,系统将自动调整并发度为分区数。

    • 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:监控数据处理节点(不包括Source节点)空闲时间,当VERTEX处理数据时间占比持续大于该值时,触发调大并发度的操作,以提升资源的使用。默认值为0.8。

    • slot-usage-detector.scale-down.threshold:监控数据处理节点(不包括Source节点)空闲时间,当VERTEX处理数据时间占比持续小于该值时,触发调小并发度的操作,以降低资源的使用。默认值为0.2。

    • slot-usage-detector.scale-up.sample-interval:监控slot空闲指标的时间间隔,以便计算该时间间隔的平均值。

      默认值为3分钟,与slot-usage-detector.scale-up.thresholdslot-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。

  4. 单击保存

开启并配置定时调优

操作步骤

  1. 进入开启并配置定时调优页面。

    1. 登录实时计算控制台

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

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

    4. 自动调优页签,单击定时调优模式

  2. 单击新建定时计划

  3. 资源配置区域,填写资源配置信息。

    • 触发周期:您可以选择为单次触发、每天、每周和每月。当选择为每周和每月时,您还需要指定对应的生效日期范围。

    • 生效时间:选择具体的生效时间。

    • 资源模式:支持基础模式和专家模式。配置详情请参见配置作业资源

    • 运行参数:参数配置详情请参见运行参数配置

  4. (可选)单击新增资源配置时段后,配置生效时间和资源配置。

    您可以在同一个定时计划中,配置多个时间段的资源调优计划。

    重要

    同一定时计划中,新增资源配置时段的触发时间必须和已有资源配置的触发时间之间的间隔大于半小时,否则无法保存新的资源配置。

  5. 单击目标资源定时计划名称右侧操作列下的应用

配置示例

全天09:00~19:00是业务高峰,在高峰时间段使用30 CU。19:00到第二天09:00是业务低峰,在业务低峰时使用10 CU。该场景的调优策略配置结果如下图所示。

image.png

智能调优默认调优行为

如果您开启了智能调优,则系统默认会从并发度和内存两个方面为您进行自动调优:

  • 智能调优会调整作业的并发度来满足作业流量变化所需要的吞吐。

    智能调优会监控消费源头数据的延迟变化情况、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 SQL优化两方面提升Flink SQL作业性能,详情请参见高性能Flink SQL优化技巧