当前位置:   article > 正文

【监控|性能调优】Flink 性能调优1之 反压_flink 反压

flink 反压

通过了解反压模型,反压的观察方法,可以定位到出现反压的算子,进而可以具体分析出现反压的原因,以便调优。

flink 版本1.12.5

 

一、反压的检测与观察反压

以一个简单的 Source -> Sink Job 为例:

如果看到 Source 发生了警告,意味着 Sink 消费数据的速率比 Source 生产数据的速率要慢。 Sink 正在向上游的 Source 算子产生反压。

1. 反压监控模型

JobManager 对每个Task重复调用 Task.isBackPressured(),来监控每个Task的反压。

反压的判断是基于数据输出的Buffer可用性进行判断的,如果一个Buffer不可用,表明Task被反压了。
 

在这里插入图片描述
 

反压下的自然降速

当下游算子消费上游算子的buffer变慢时,上游的buffer不能及时回收过来,buffer在不可用的时间里,上游算子就接收不到数据,此时就形成了自然降速。

 
反压监控参数

参数解释
web.backpressure.refresh-interval有效的反压结果被废弃并重新进行采样的时间间隔(默认: 60000, 1 min)
web.backpressure.num-samples用于确定反压采样的样本数 (默认: 100)
web.backpressure.delay-between-samples用于确定反压采样的间隔时间 (默认: 50, 50 ms)

 

2. 观察反压

jobManager的采样频率

默认情况下,JobManager触发100次采样,然后每隔50ms来确定反压。如果Ratio=0.01表示100个样本中只有1个反压了。
在这里插入图片描述
为了不因为采样导致TaskManager负载过重,Web页面仅在60秒后重新采样。
 

当反压比例超过0.5时,说明上游算子堵塞的比较厉害了,这时flink会自动降低数据拉取的频率,用来减轻反压现象,但这会造成一定程度的性能下降。

 

3. 寻找反压根节点

如果出现发反压,那么反压的根节点可能存在于

  1. 比如FlatMap算子,输入一条数据发送多条数据,导致生产的速度大于输出的速度。
  2. 反压会逆向传递,这可能导致中间节点出现:其下游节点接收速率小于中间节点的发送速率的反压现象。这需要继续向下排查,直到找到第一个反压状态为OK的节点。

一般情况下,繁忙程度接近100%,并导致上游算子反压程度接近100%的节点,就是反压产生的根节点。

 

二、反压的原因

1. 数据倾斜

  • 通过Flink Web UI 对比各SubTask接收的数据来确认是否产生了数据倾斜。
  • 还可以通过 Checkpoint detail各的Checkpointed Data Size,来确定是否数据倾斜。
    在这里插入图片描述

2.第三方组件

如果source端(还包括维表关联时的维表)或sink端读写性能比较低,需要检查第三方组件是否是性能瓶颈的主要原因。

  • 维表关联时,维表可以配合使用lookup缓存大小,缓存过期时间,减少和第三方组件交互的频率。
  • source端,可以设置分区扫描参数,并行的拉取数据,提高读写性能

 
 
 

参考:
https://nightlies.apache.org/flink/flink-docs-release-1.12/zh/ops/monitoring/back_pressure.html
https://zhuanlan.zhihu.com/p/424093505
https://blog.csdn.net/Johnson8702/article/details/123841740

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/548459
推荐阅读
相关标签
  

闽ICP备14008679号