当前位置: 首页 > news >正文

Flink反压问题

背景

        在使用flink的过程中,多次遇到过反压(backpressure)的问题,这通常是因为数据处理的速率超过了数据源或下游系统的处理能力导致。

反压的底层剖析

网络流控

        一个重要的概念是网络流控,如上图,不同的Consumer和Producer的消费和生产速率不一样,那么一定时候后,receive buffer和send buffer就肯定会满,导致生产端瘫痪。

为了能提前感知这一问题,引入了反压机制,增加了一个feedback:
在设计的过程中,会包含正反馈和负反馈,在反压的场景下,就是负反馈,让生产端降低发送速率,甚至停止发送。

Flink1.5以前的流控方式

在1.5以前,Flink基于TCP实现流控,如图:
我们知道TCP通过滑动窗口ack机制实现了流量控制,简单来说就是TCP接收端会在每次收到数据包后给发送端返回两个主要信息:

ACK=下次从哪个index继续发送
window=最多发送多少个字节


ack=8
window=1

如上表示从第8个字节继续发送,但只能发送1个,从而控制发送端的发送速度

拓展:如果返回window=0,代表接收端buffer已满,发送端会停止发送。为了知道什么时候可以继续发送,发送端会发送一个探测信号zeroWindowProbe来检测接收端的buffer情况。

Flink反压如何传播

简单来说,基于对接收缓冲区的剩余大小感知,如果下游的缓存区满了,信号会从下游不断传递给上游,直到所有算子的所有缓存区均打满。

至于是跨TaskManager还是TaskManager内部,反压的机制是同理的,主要关注不同边界的缓冲区情况。

跨taskManager的反压示意


taskManager内反压示意

基于TCP的反压机制的弊端

        虽然通过TCP可以实现反压机制,但是因为过于通用,还是产生了一些牺牲,因为一个taskManager内可能会有多个Task进行,而多个Task会复用一个socket进行传送(多路复用),如果某个task把tcp打满,会导致Task间相互影响

Flink1.5之后基于Credit-based的反压机制

        核心是通过Flink应用层来实现TCP流控的机制,避免影响底层tcp网络


如上图,通过ResultSubpartition这一层来控制,在每次发送内容的时候,发送端会带上自己剩余的内容大小,而接收端收到后也会反馈inputChannel的剩余大小。这样就可以跨过TCP、Netty这两层,也就可以避免一个TaskManager中多个Task的相互影响。

反压场景解决

        了解的反压的原理后,在面对Flink反压时,我们核心要分析出哪个环节慢了,然后通过调整并行度,资源分配、性能优化等手段进行解决。

具体case

后续补充

http://www.xdnf.cn/news/1458217.html

相关文章:

  • 算法 --- 分治(归并)
  • 【Markdown转Word完整教程】从原理到实现
  • VOC、COCO、YOLO、YOLO OBB格式的介绍
  • AgentThink:一种在自动驾驶视觉语言模型中用于工具增强链式思维推理的统一框架
  • 深入剖析Spring Boot / Spring 应用中可自定义的扩展点
  • elasticsearch学习(五)文档CRUD
  • 基于脚手架微服务的视频点播系统-界面布局部分(二):用户界面及系统管理界面布局
  • 02-ideal2025 Ultimate版安装教程
  • SPI flash挂载fatfs文件系统
  • 什么是静态住宅IP 跨境电商为什么要用静态住宅IP
  • More Effective C++ 条款28:智能指针
  • 稠密矩阵和稀疏矩阵的对比
  • 神马 M21 31T 矿机解析:性能、规格与市场应用
  • Python多序列同时迭代完全指南:从基础到高并发系统实战
  • vcruntime140_1.dll缺失?5个高效解决方法
  • 手机秒变全栈IDE:Claude Code UI的深度体验
  • SpringBoot实现国际化(多语言)配置
  • MySQL 8.0 主从复制原理分析与实战
  • 深入解析Java HashCode计算原理 少看大错特错的面试题
  • 多线程——线程状态
  • 并发编程——17 CPU缓存架构详解高性能内存队列Disruptor实战
  • ResNet(残差网络)-彻底改变深度神经网络的训练方式
  • linux——自定义协议
  • 多Agent协作案例:用AutoGen实现“写代码+测Bug”的自动开发流程
  • 秒店功能更新:多维度优化升级,助力商家经营
  • 当 LLM 遇上真实世界:MCP-Universe 如何撕开大模型 “工具能力” 的伪装?
  • 记录相机触发相关
  • 机器学习入门,第一个MCP示例
  • (D题|矿井突水水流漫延模型与逃生方案)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 生成式引擎优化(GEO):数字营销新标配,企业如何抢占AI搜索流量高地?