Flink反压机制和反压监控

当一个作业提交到Flink集群后,我们通过什么指标观察作业的运行状态?如果作业流量突增超过了集群的负载能力,我们如何得知?如果下游发现数据出现了延迟,我们怎么去troubleshooting?

要回答以上问题,我们必须要理解flink的反压机制。通过反压指标,我们可以观察到每个子任务的运行状态,是繁忙,空闲还是拥塞?

反压机制

这个视频已经讲得很清楚了,网上的大多博文都是这个视频的复述。直接看视频即可。
Flink 网络流控与反压剖析

反压监控

反压监控一是可以直接看Dashboard,二是通过看网络指标。后者相比前者更为准确。

网络指标主要是看inPoolUsage和outPoolUsage。前者是输入Gate网络缓冲池的使用率,后者是输出Gate网络缓冲池的使用率。结合反压机制,不难通过这两个指标分析算子的反压情况(下表不需要记忆,可以自己推导)。需要注意的是Flink中数据并不是一个一个流式传输的,而是攒在输出网络缓冲中一批一批地传。因此正常情况下outPoolUsage并不是0,而是1/3。

inPoolUsage又可以分为exclusiveBuffersUsage和floatingBuffersUsage ,其中exclusiveBuffersUsage是每个channel专属的,而floatingBuffersUsage是所有channel共享的,一个channel的exclusiveBuffers满了就会申请floatingBuffers,因此可以通过这两个指标确定具体哪个通道产生了背压。


想要较为全面理解Flink的网络栈可以参考:

  1. 深入了解 Flink 网络栈(一):物理实现及优化结果
  2. 深入了解 Flink 网络栈(二):监控、指标和处理背压
  3. Network memory tuning guide

最后提一下Dashboard中是如何判断反压的,只要输出缓冲池都用光了,就认为反压了。官方原话如下。
Internally, back pressure is judged based on the availability of output buffers. If a task has no available output buffers, then that task is considered back pressured. Idleness, on the other hand, is determined by whether or not there is input available.


Flink反压机制和反压监控
https://yunzhen.github.io/2022/12/25/Flink反压机制/
作者
云祯
发布于
2022年12月25日
许可协议