本文为您介绍如何配置自动调优,以及配置过程中的注意事项。

背景信息

通常,您需要花费大量的时间进行作业调优。例如,新上线一个作业时,需要考虑如何配置该作业的资源、并发个数、Task Manager个数及大小等。此外,作业运行过程中,还需要考虑如何调整作业资源,使作业处于最高资源利用率;作业出现反压或延时增大的情况时,需要考虑如何调整作业配置等。

Flink全托管的自动调优功能,可以在各个算子和流作业上下游性能达标和稳定的前提下,帮您更合理的调整作业并行度和资源配置,全局优化您的作业,解决作业吞吐量不足、全链路存在反压和资源浪费等各种性能调优问题。

虽然自动调优可以优化流作业性能,但无法彻底解决流作业性能瓶颈,以下情况您需要自行解决:
  • 上下游存储性能问题
    • 上游存储:例如,数据总线DataHub分区不足或消息队列MQ吞吐量不足。
    • 下游存储:例如,Sink性能问题或云数据库RDS死锁。
  • 自定义函数性能问题

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

注意事项

自动调优配置生效,需要满足以下条件:
  • 在作业代码中未配置作业并行度

    如果您使用了DataStream API或Table API接口编写作业,请确认作业代码中未配置作业并行度,否则自动调优将无法调整作业资源。

  • 在界面和代码中未配置Task Manager数量

    如果在界面或代码中配置了Task Manager数量自动调优将无法正常运行。

  • YAML配置文件中未配置taskmanager.numberOfTaskSlots参数。
  • 升级策略未配置为None。

    如果升级策略配置为None,则修改作业配置后,系统不会自动重启作业,使自动调优配置生效。

开启自动调优

  1. 登录实时计算控制台
  2. Flink全托管页签,单击对应工作空间操作列下的开发控制台
  3. 在左侧导航栏上,单击 作业列表
  4. 单击目标作业名称。
  5. 单击自动调优
  6. 启用自动调优工作模式。
    • Disabled

      不开启自动调优功能。

    • Monitoring

      开启自动调优功能,系统会根据您选择的调优策略,给出该作业推荐的调优配置,您需要单击启用建议配置使配置生效。

    • Active

      开启自动调优功能,系统会根据您选择的调优策略,给出该作业推荐的调优配置,并自动启动作业使配置生效,您无需操作。

  7. 选择调优策略。
    说明 推荐的调优策略为:
    • CPU-Based单独使用。
    • Source-Delay-BasedSlot-Utilization-Based策略组合使用。
    • CPU-Based(默认调优策略)
      • 策略说明

        基于Task Manager CPU实际使用率来进行作业并行度的调优,达到提升吞吐量和降低成本的效果。支持增加当前作业的并行度(Scale Up)和降低当前作业的并行度(Scale Down)。

      • 调优场景
        • CPU密集型作业(强烈推荐该策略)。
        • 通用作业场景。
      • 使用限制
        • 如果您的作业是I/O密集型作业,则不建议您配置CPU-Based策略进行调优。
        • 不能同时开启CPU-BasedSlot-Utilization-Based策略。
      • 参数说明
        参数 说明 默认值 默认值解释
        cpu-based.scale-up.threshold 触发Scale Up操作的CPU使用率阈值。 0.8 Task Manager CPU使用率超过80%时,则触发Scale Up操作。
        cpu-based.scale-down.threshold 触发Scale Down操作的CPU使用率阈值。 0.2 Task Manager CPU使用率低于20%时,则触发Scale Down操作。
        cpu-based.scale-up.window-size.min Scale Up时,CPU使用率的统计时间窗口大小。 3,单位为分钟。 计算最近3分钟内的CPU使用率,如果最近3分钟内CPU使用率超过80%,则触发Scale Up操作。
        cpu-based.scale-down.window-size.min Scale Down时,CPU使用率的统计时间窗口大小。 30,单位为分钟。 计算最近30分钟内的CPU使用率,如果30分钟内CPU使用率低于20%,则触发Scale Down操作。
    • Source-Delay-Based
      说明 如果您的数据源为SLS或DataHub,使用CPU-Based策略后,调优效果不佳,可以使用Source-Delay-Based策略进行动态Scale Up。
      • 策略说明

        基于消费数据源头的延迟,来衡量作业处理吞吐的能力。当数据处理能力不足时,使用Scale Up方式来提高作业的吞吐能力。

      • 使用限制
        • 该策略只能Scale Up作业,不能Scale Down作业。
        • 该策略仅对SLS和DataHub生效,对其他Connector不生效。
      • 参数说明
        参数 说明 默认值 默认值解释
        source-delay-based.threshold 可以容忍的最大延迟阈值。 60000,单位为毫秒。 当作业延时达到60000ms,则触发Scale Up操作。
        source-delay-based.target-utilization 目标资源利用率。 0.8 作业的目标资源利用率为80%,如果资源利用率达到80%,则停止Scale Up操作。
        source-delay-based.scale-up.window-size.min 延迟变化率统计周期窗口大小。 3,单位为分钟。 计算最近3分钟作业延迟和slot-utilization值,如果达到阈值,则触发Scale Up操作。
    • Slot-Utilization-Based
      • 策略说明

        监控数据处理节点(不包括Source节点)空闲时间,当持续大于某一阈值时,降低作业的并行度以降低资源使用。

      • 使用限制
        • Source节点为作业性能瓶颈时,需要关闭该策略。
          说明 当Source节点不是作业瓶颈时,可以使用Slot-Utilization-Based策略进行动态Scale Down。
        • 该策略只能Scale Down,不能Scale Up。
        • 该策略不能和CPU-Based策略同时开启。
      • 参数说明
        参数 说明 默认值 默认值解释
        slot-utilization-based.threshold 触发Scale Down时的slot-utilization 0.5 slot-utilization低于50%时,则触发Scale Down操作。
        slot-utilization-based.scale-down.window-size.min 统计slot-utilization的窗口大小。 30,单位为分钟。 计算最近30分钟内slot-utilization的使用率。
    • Memory-Utilization-Based
      • 策略说明

        基于TaskManager的内存使用和GC(Garbage Collection)情况,调整资源大小。

      • 参数说明
        参数 说明 默认值 默认值解释
        memory-utilization-based.memory-usage-max.threshold 可以容忍的最大内存利用率 0.95 TaskManager的内存使用率超过95%时,则触发调大内存操作。
        memory-utilization-based.memory-usage-min.threshold 可以容忍的最小内存利用率 0.3 TaskManager的内存使用率低于30%时,则触发调小内存操作。
        memory-utilization-based.memory-usage.target-utilization 目标资源利用率 0.8 调整TaskManager内存时,目标内存使用率达到80%。
        memory-utilization-based.scale-up.window-size.min 内存Scale Up的监控周期 3,单位为分钟。 计算过去3分钟内存使用率,如果该使用率超过95%,则触发调大内存操作。
        memory-utilization-based.scale-down.window-size.min 内存Scale Down的监控周期 30,单位为分钟。 计算过去30分钟内存使用率,如果该使用率低于30%,则触发调小内存操作。
        memory-utilization-based.gc-ratio.threshold GC频率触发内存Scale Up阈值 0.2 每秒GC次数超过0.2时,触发调大内存操作。
        说明 VVP 2.2.2版本不支持基于GC的调优。
        memory-utilization-based.gc-time-longest-ms.threshold 单次GC时间过长触发内存Scale Up阈值 15000,单位为毫秒。 单次GC时间过长超过15s时触发调大内存操作。
        说明 VVP 2.2.2版本不支持基于GC的调优。
        memory-utilization-based.gc-time-ms-per-second.threshold 平均每秒数据处理中GC时间占比,超过该值会触发内存的Scale Up。 200,单位为毫秒。 数据处理时,平均每秒GC时间占比超过200ms时调大内存。
        说明 VVP 2.2.2版本不支持基于GC的调优。
        memory-utilization-based.memory-scale-up.max 单个TaskManager的内存调整时能调整到的最大值。 16Gi TaskManager内存调整上限为16Gi。
        说明 VVP 2.2.2版本不支持基于GC的调优。
        memory-utilization-based.memory-scale-up.ratio GC rate和time超过阈值时,调大内存的倍数。其中:
        • GC rate是指JVM运行时,平均每秒GC的次数。
        • GC time是指JVM运行时,单次GC花费的时间最长时间。
        1.5 当GC频率或者GC time超过阈值时,调大内存的比例,默认为原来的1.5倍。
        说明 VVP 2.2.2版本不支持基于GC的调优。
  8. 填写冷却时间
    冷却时间是指作业被自动调优两次自动启动之间的最小时间间隔。

    如果自动调优被设置为Active,则自动调优会根据推荐配置自动启动作业。

  9. 可选:填写自定义配置
    如果CPU-BasedSource-Delay-BasedSlot-Utilization-Based的默认值不符合您的作业调优预期,您可以选择对应的调优策略后,在自定义配置中自定义对应参数的取值。配置多个参数时,每个参数写一行,示例如下。
    slot-utilization-based.threshold: 1
    slot-utilization-based.scale-down.window-size.min: 50
    说明 以上参数引号(:)号和参数值之间必须有1个空格,没有空格会无法保存该配置。
  10. 单击保存