Flink系列-背压(反压)

了解背压

什么是背压

在流式处理系统中,如果出现下游消费的速度跟不上上游生产数据的速度,就种现象就叫做背压
(backpressure,也叫反压)

背压产生的原因

下游消费的速度跟不上上游生产数据的速度,可能出现的原因如下:

  1. 节点有性能瓶颈,可能是该节点所在的机器有网络、磁盘等等故障,机器的网络延迟和磁盘不
    足、频繁 GC、数据热点等原因。
  2. 数据源生产数据的速度过快,计算框架处理不及时。比如消息中间件 kafka,生产者生产数据过
    快,下游 flink 消费计算不及时。
  3. flink 算子间并行度不同,下游算子相比上游算子过小。

背压导致的影响

首先,背压不会直接导致系统的崩盘,只是处在一个不健康的运行状态。

  1. 背压会导致流处理作业数据延迟的增加。
  2. 影响到 Checkpoint,导致失败,导致状态数据保存不了,如果上游是 kafka 数据源,在一致性
    的要求下,可能会导致 offset 的提交不上。
    原理: 由于 Flink 的 Checkpoint 机制需要进行 Barrier 对齐,如果此时某个 Task 出现了背压,Barrier流动的速度就会变慢,导致 Checkpoint 整体时间变长,如果背压很严重,还有可能导致 Checkpoint超时失败。
  3. 影响 state 的大小,还是因为 checkpoint barrier 对齐要求。导致 state 变大。
    原理:接受到较快的输入管道的 barrier 后,它后面数据会被缓存起来但不处理,直到较慢的输入管道的 barrier 也到达。这些被缓存的数据会被放到 state 里面,导致 state 变大。

定位背压

  • 在 web 页面发现 fink 的 checkpoint 生成超时。
  • 查看 jobmanager 日志。
  • 在 BackPressure 界面直接可以看到。
    在这里插入图片描述
  • Metrics 监控背压。

解决背压

Flink不需要一个特殊的机制来处理背压,因为Flink中的数据传输相当于已经提供了应对背压的机制。
所以只有从代码上与资源上去做一些调整。

  1. 背压部分原因可能是由于数据倾斜造成的,我们可以通过 Web UI 各个 SubTask 的 指标值来
    确认。Checkpoint detail 里不同 SubTask 的 State size 也是一个分析数据倾斜的有用指标。
    解决方式把数据分组的 key 预聚合来消除数据倾斜。
  2. 代码的执行效率问题,阻塞或者性能问题。
  3. TaskManager 的内存大小导致背压。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值