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异常、HeartBeartTimout异常时,会调高TM的内存,默认最大调整到16 GiB。
    • 在TM内存使用率超过95%时,会调大TM的内存。
    • 在TM的实际内存使用率连续24小时低于30%时,降低TM内存的配置。

开启自动调优

  1. 进入目标作业运维页面。
    1. 登录实时计算管理控制台
    2. Flink全托管页签,单击目标工作空间操作列下的控制台
    3. 在左侧导航栏上,选择应用 > 作业运维
    4. 单击目标作业名称。
  2. 配置自动调优参数信息。
    1. 自动调优页签,单击配置
    2. 单击自动调优配置
    3. 填写自动调优参数信息。
      配置自动调优
      配置 配置含义 默认值
      两次调优之间最小间隔(分钟) 两次自动调优启动之间的最小时间间隔,也叫冷却时间。 默认值为10分钟。

      防止作业短时间重启两次,建议最小配置为10分钟。

      资源最大上限 使用的最大资源限制,防止作业使用资源过大。 默认值为64 CU。
      扩并发最小时间间隔 调大并发度时,最小触发时间间隔。 默认值为6分钟。

      6分钟内,检测CPU使用率。如果超过阈值,则会进行扩并发操作,或建议扩并发。

      缩并发最小时间间隔 调低并发度时最小触发时间间隔。 默认值为24小时。

      24小时内,检测CPU使用率,如果小于阈值,则会进行缩并发操作,或建议缩并发。

      调大并发度时CPU使用率阈值 调大并发度,CPU使用率阈值。 默认值为0.8。

      扩并发最小时间间隔配置项一同使用和生效。

      调小并发度时CPU使用率阈值 调小并发度,CPU使用率阈值。 默认值为0.2。

      缩并发最小时间间隔配置项一同使用和生效。

      更多参数配置 您可以配置的参数列表如下:
      • 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.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。

  3. 单击保存更改
  4. 单击一键开启自动调优
    开启自动调优
    一键开启自动调优功能后,刷新页面,您就能看到系统生成了一个对应的调优策略。自动调优

配置定时调优

  1. 进入目标作业运维页面。
    1. 登录实时计算管理控制台
    2. Flink全托管页签,单击目标工作空间操作列下的控制台
    3. 在左侧导航栏上,选择应用 > 作业运维
    4. 单击目标作业名称。
  2. 单击新建调优策略
  3. 配置基础设置。
    1. 填写基础配置信息。
      调优策略
      配置说明如下表所示。
      配置 说明
      调优模式 支持以下两种模式:
      • 自动调优:选择为自动调优后,您需要选择自动调优的触发时间。
      • 固定资源:选择固定资源后,下一步您需要配置资源有关的参数信息。
      触发周期 您可以选择为单次触发、每天、每周和每月。当选择为每周和每月时,您还需要指定对应的生效日期范围。
      生效时间 选择具体的生效时间。
    2. 单击下一步
  4. 可选:选择的是固定资源模式后,填写资源配置信息。
    详情请参见配置细粒度资源
  5. 单击确认
    策略创建完成后,会在触发时间生效。您可以在对应策略的操作列下,编辑、删除或查看策略详情。调优策略

配置示例

全天09:00~19:00是业务高峰,在高峰时间段使用30 CU。19:00到第二天09:00是业务低峰,在业务低峰时使用10 CU。该场景的调优策略配置结果如下图所示。调优策略
具体的配置步骤详情如下:
  1. 高峰基础配置如下图所示。高峰的基础配置
  2. 高峰资源配置如下图所示。高峰资源配资
  3. 低峰基础配置如下图所示。低峰基础配置
  4. 低峰资源配置如下图所示。低峰资源配置