Flink-反压-1.基本概念

1.为什么会存在反压

反压是很常见的情况,如下图

  • 生产者:每s生产2MB数据
  • 消费者:每s消费1MB数据

在生产者和消费者之间又存在一个缓冲区,为了缓解这个差值的,但是如果一致存在差值,迟早有一天,缓冲区会满,到时候会引发严重的溢出问题

因此,我们为了解决这个问题,需要在中间加一个速度控制器,你可以理解为是变压器,把高压变为低压,Flink有2种解决方案

  1. 静态限速(1.5前)
  2. 动态反馈(1.5后)

2.TCP-based反压--静态限速

这是早期Flink版本基于TCP去做的处理,我们都知道类似storm、spark、zookeeper都有一个机制就是feedback,而TCP天然具备feedback机制,因此Flink早期用它做反压 简单看一下他的原理(不重要)

我们看得出来,整个静态窗口的机制还存在很大的不足,比如缓存区满了,就只能消费1个后,才能生产1个

3.反压信息的传播

(1) 几个组件的概念

  • ResultPartition:简称RSP ,生产者的数据输出 "分区",是数据发送的逻辑单元,其中ResultSubPartition 是细分,实际存储待发送数据的缓冲区,用于写
  • InputGate:简称IC,消费者的数据输入 "门",用于读 ,聚合多个输入通道(InputChannel )的数据,其中InputChannel 是单个数据通道,对应上游一个 ResultSubpartition
  • LocalBufferPool:简称LBP ,为当前 TaskManager 内的任务提供 本地缓冲区,临时存放待发送的数据。
  • NetworkBufferPool:简称NBP ,Flink 全局的 跨 TaskManager 网络缓冲区,用于在网络传输前暂存数据。

反压的前提:

  1. IC满了
  2. LBP满了
  3. NBP满了

(2) 跨TM的反压

(3) TM内的反压

4.Credit-based反压---动态反馈

在TCP反压版本优缺点的情况下,Flink选择自己实现一个feedback机制,credit可以类比TCP的窗口,原理如下图 原理就是下面几点

  1. 下游算子根据其可用缓冲区数量和处理能力计算信用值Credit(这是动态更新的),然后发送给上游算子
  2. 上游算子根据Credit去发送数据(只能<=Credit的值)
  3. 当下游可用缓冲区数量都满了,Credit降为0了,通知上游触发反压
  4. 上游开始反压,停止RS的写入
相关推荐
诗旸的技术记录与分享9 分钟前
Flink-1.19.0-核心源码详解
大数据·flink
陈随易22 分钟前
VSCode v1.103发布,AI编程任务列表,可用GPT 5和Claude 4.1
前端·后端·程序员
中等生25 分钟前
Python的隐形枷锁:GIL如何"绑架"了你的多线程梦想
后端·python
Pitayafruit44 分钟前
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
redis·分布式·后端
哈基米喜欢哈哈哈1 小时前
Netty入门(二)——网络传输
java·开发语言·网络·后端
尘心不灭1 小时前
Spring Boot 项目代码笔记
spring boot·笔记·后端
小高0071 小时前
GPT-5震撼登场!从单一模型到协作系统,AI架构的革命性突破
前端·后端·chatgpt
不老刘1 小时前
AI助力前端开发:Claude生成Element UI + TinyMCE集成135编辑器的代码
后端
coding随想1 小时前
深入浅出数据库事务:原子性、一致性、隔离性、持久性
后端
我是哪吒1 小时前
分布式微服务系统架构第160集:百万台设备Netty网关架构
后端·面试·github