Flink全托管已默认开启自动调优,本文为您介绍如何配置自动调优,以及配置过程中的注意事项。

背景信息

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

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

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

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

前提条件

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

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

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

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

  • 在YAML配置文件中未配置taskmanager.numberOfTaskSlots参数。

注意事项

  • 自动调优触发后需要重启作业,会导致作业短暂停止处理数据。作业重启的方式由升级策略配置参数决定,推荐使用Stateless升级策略。
  • 自动调优策略对作业的处理模式是基于一定的假设,例如,流量平滑变化、不能有数据倾斜、每个算子的吞吐能力能够随并发度的升高而线性拓展。当业务逻辑严重偏离以上假设时,作业可能会存在异常,例如,无法触发修改并发度的操作、作业不能达到正常状态和作业持续重启等。此时您需要将自动调优调整为Monitoring或者Disabled,进行手动调优。
  • 自动调优目前无法识别外部系统的问题,如果出现,需要您自行解决外部系统问题。例如,外部系统故障或访问变慢时,会导致作业并行度增大,加重外部系统的压力,导致外部系统雪崩。
  • 自动调优目前不支持Session集群部署的作业。

配置自动调优

  1. 进入作业运维界面。
    1. 登录实时计算控制台
    2. Flink全托管页签,单击目标工作空间操作列下的开发控制台
    3. 在左侧导航栏上,选择应用 > 作业运维
  2. 配置自动调优。
    1. 单击目标作业名称。
    2. 单击自动调优页签。
    3. 单击配置页签。
    4. 默认已开启自动调优功能,您可以选择关闭或者以自动启动的方式使配置生效。
      • Active

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

      • Disabled

        不开启自动调优功能。

      • Monitoring(默认值)

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

    5. 选择调优策略。
      说明 VVP 2.4及以后的版本Source-Delay-BasedSlot-Utilization-BasedCPU-Based策略会同时生效,同时系统会智能判断是否需要进行并发度的调整。
      • CPU-Based(默认调优策略)
        • 策略说明

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

        • 调优场景
          • CPU密集型作业(强烈推荐使用该策略)。
          • 通用作业场景。
        • 使用限制

          如果您的作业是I/O密集型作业,则不建议您配置CPU-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作业。

        • 参数说明
          参数 说明 默认值 默认值解释
          source-delay-based.threshold 可以容忍的最大延迟阈值。 60000,单位为毫秒。 当作业延时达到60000ms,则触发Scale Up操作。
          source-delay-based.scale-up.window-size.min 延迟变化率统计周期窗口大小。 3,单位为分钟。 计算最近3分钟作业的延迟,如果达到阈值,则触发Scale Up操作。
      • Slot-Utilization-Based
        • 策略说明

          统计指定时间窗口内slot-utilization的值,如果slot-utilization的值持续大于Scale Down时的slot-utilization阈值时,提高作业的并行度以降低资源紧张的情况。如果持续小于Scale Up时的slot-utilization阈值时,降低作业的并行度以降低资源使用。

        • 使用限制
          统计slot-utilization时,不统计处理Source节点数据的时间。如果Source节点为作业性能瓶颈时,您需要关闭该策略。
          说明 当Source节点不是作业瓶颈时,可以使用Slot-Utilization-Based策略进行动态Scale Down。
        • 参数说明
          参数 说明 默认值 默认值解释
          slot-utilization-based.threshold 触发Scale Down时的slot-utilization的阈值。

          如果slot-utilization的值低于该值时,则触发Scale Down。

          0.2 slot-utilization值低于20%,则触发Scale Down。
          slot-utilization-based.scale-down.window-size.min 触发Scale Down时的slot-utilization的统计时间窗口。 30,单位为分钟。 触发Scale Down的默认时间窗口为30分钟。
          slot-usage-detector.scale-up.threshold 触发Scale Up时的slot-utilization的阈值。

          如果slot-utilization的值大于该值时,则触发Scale Down。

          0.8 slot-utilization值高于80%,则触发Scale Up。
          slot-usage-detector.scale-up.sample-interval 触发Scale Up时的slot-utilization的统计时间窗口。 3,单位为分钟。 触发Scale Up的默认时间窗口为3分钟。
      • Memory-Utilization-Based
        • 策略说明

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

        • 参数说明
          参数 说明 默认值 默认值解释
          memory-utilization-based.memory-usage-max.threshold 可以容忍的最大内存利用率 0.95 Task Manager的内存使用率超过95%时,则触发调大内存操作。
          memory-utilization-based.memory-usage-min.threshold 可以容忍的最小内存利用率 0.3 Task Manager的内存使用率低于30%时,则触发调小内存操作。
          memory-utilization-based.memory-usage.target-utilization 目标资源利用率 0.8 调整Task Manager内存时,目标内存使用率达到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 单个Task Manager的内存调整时能调整到的最大值。 16 Gi Task Manager内存调整上限为16 Gi。
          说明 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的调优。
      • job-exception-based
        • 策略说明

          根据作业Failover时间和异常信息,调整相应的资源。

        • 参数说明
          参数 说明 默认值 默认值解释
          job-exception-based.oom-exception.memory-scale-up.ratio OOM(OutOfMemory)异常时,调大TM内存的比例。 1.5 发生OOM异常时,目标内存调整为1.5倍的当前内存值。
          job-exception-based.oom-exception.memory-scale-up.max 单个TM的内存能调整到的最大值。 16 Gi TM内存调整上限为16 Gi。
          job-exception-based.oom-exception.include-tm-timeout TM OOM异常是否包括TM超时。 true TM OOM异常默认包括TM超时。
    6. 填写冷却时间
      冷却时间是指作业被自动调优两次自动启动之间的最小时间间隔。

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

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