一、事件介绍
如果算子只有轻度的背压现象(例如 Flink Web UI 中算子的背压值小于 50%),则可以继续观察背压是否只是偶现的。如果背压值已经超过了50%,则很可能对作业的性能造成较大影响,需要尽快着手处理。
注意:该功能目前为 Beta 版,暂不支持规则的自定义,后续该能力会陆续上线。
二、判定标准
系统每5分钟会检测一次 Flink 作业的算子背压情况。如果发现某个算子的背压值(如果算子有多个并行度,则取最大值)高于50%,则继续向下查找,直到遇到第一个背压值(图中的 Backpressured)低于阈值,但是繁忙度(图中的 Busy)高于50% 的算子,该算子通常是处理速度较慢、引起背压的根源。此时如果 查看 Flink Web UI,可以看到一系列的灰色算子后紧跟着一个红色算子:
如果链路中某个算子的背压超过50% 但小于80%,会触发 TaskManager 背压较高事件。如果算子的背压超过80%,则会触发 TaskManager 背压严重事件。
三、告警配置
用户可以对该事件 配置作业监控告警(异常事件),并实时接收触发和恢复的告警通知。
注意:TaskManager 背压较高(OceanusBackpressureHigh)、TaskManager 背压过高(OceanusBackpressureTooHigh) 为两种不同的告警事件。如果你只关心影响作业运行的严重背压事件,可以只配置后者的告警通知。
四、处理建议
收到该事件推送后,我们建议立刻 查看 Flink Web UI,分析当前的运行图。如果可以找到引发背压的根源算子,则建议使用 Flink UI 内置的 火焰图功能 分析 CPU 调用热点,即占用 CPU 时间片较多的方法(如果火焰图功能未启用,需要在作业的 高级参数 选项中,加入 rest.flamegraph.enabled: true 参数,并重新发布作业版本,才可使用火焰图绘制功能)。
例如下的繁忙算子 CPU 火焰图中,MD5 计算的相关方法占用了大量的时间片,已经成为了作业的性能瓶颈。此时我们可以修改 Flink 作业中该算子的计算逻辑,避免如此高频地调用该方法,或者使用更高效的算法等优化措施。
此外,我们建议增加作业的 资源配置,例如调大 TaskManager 的规格(提升 TaskManager 的 CPU 配额,可以有更多的 CPU 资源来处理数据),提升作业的算子并行度(降低单个 TaskManager 的数据处理量,减少 CPU 计算压力)等,令数据能够更有效地处理。
如果你找不到引起背压的根源,且以上方法均未能解决问题,可以通过 工单 等方式联系我们的技术人员以协助定位。