Flink学习笔记:反压

今天来聊在 Flink 运维过程中比较常见的一个问题:反压。

什么是反压

反压是流式系统中关于数据处理能力的动态反馈机制,并且是从下游到上游的反馈,一般发生在上游节点的生产速度大于下游节点的消费速度的情况。

数据如何传输

在了解反压的细节之前,首先要知道 Flink 中数据是如何传输的。在 Flink 中,两个算子之间的关系分为三种:

  1. 部署在同一个 TaskManager 上,且属于同一算子链。

  2. 部署在同一个 TaskManager 上,但不是同一个算子链。

  3. 部署在不同的 TaskManager 上。

三种不同的关系,对应的算子间的数据传输方式也不同。先说第一种。

同一线程数据传输

同一线程中的两个算子共享内存,因此数据传输非常简单,上游产出好数据后,直接调用下游的 processElement 方法即可。

本地线程数据传输

对于第二种关系,两个算子不在同一线程,但是部署在同一个 TaskManager 上,也就是算子之间的数据传输是跨线程的。我们通过一个图来解释。

图中,Flat Map Task 是上游算子,sum 是下游的算子。它们共享一块 Buffer 内存。当 Buffer 中没有数据可以消费时,sum 所在的线程会阻塞(步骤1)。随着数据的流入,Flat Map Task 会将处理好的数据写入到 ResultSubpartition(步骤2),然后 flush 到 Buffer 中(步骤3)。此时会唤醒 sum 所在的线程(步骤4),它就可以从 Buffer 中读取数据了(步骤5)。

远程数据传输

第三种跨 TaskManager 的数据传输,与第二种类似,不过也有些区别。我们还是通过一张图来解释。

从图中可以看到,当 sum 所在线程没有 Buffer 可以消费时,会通过 PartitionRequestClient 向 Flat Map Task 所在的进程发送请求。Flat Map Task 所在进程接收到请求后,会读取 Buffer 中的数据并返回。

了解了 Flink 的数据传输方式之后,我们再来看下 Flink 是如何感知反压的。

上图是一个数据传输的简图。当 Task1 有 Buffer 空间时,记录 A 被序列化并写入 LocalBufferPool 中,接着发送到 Task2 的 LocalBufferPool 中,Task2 读取并反序列化后交由程序处理。

这里我们也分两个场景讨论。

本地传输

Task1 和 Task2 在同一个 TaskManager 节点,Task1 和 Task2 共用 Buffer,一旦 Task2 消费了 Buffer,该 Buffer 就会被回收。如果 Task2 的处理速度比 Task1 慢,那么 Buffer 的回收速度就赶不上 Task1 取 Buffer 的速度,这样会导致无 Buffer 可用,最终 Task1 就会降速。

远程传输

Task1 和 Task2 运行在不同的 TaskManager 上,那 Buffer 会发送到网络后,等接收端消费完再回收。在发送端,会通过 Netty 水位机制来保证不往网络中写太多数据,如果网络中的数据超过了高水位值,就会等其下降到低水位值以下才会继续写数据。如果网络有堆积,发送端就会暂停发送,Buffer 也不会被回收,这就会阻塞 writer 往 ResultSubPartition 中写数据。

反压监控

在 Flink Web UI 中,可以找到反压的监控

它有三种状态:

  • OK: 0% <= 反压比例 <= 10%,此时一般不用处理。
  • LOW: 10% < 反压比例 <= 50%,这种状态需要关注。
  • HIGH: 50% < 反压比例 <= 100%,已经反压,需要赶快处理。

总结

今天我们聊了什么是反压,以及 Flink 中数据传输方法和 Flink 任务是如何感知反压的。Flink 的传输方式分为三种,分别是同线程传输、本地跨线程传输以及远程传输。Flink 任务在感知反压时也分别针对本地传输和远程传输做了讨论。

相关推荐
洋洋不叫杨杨5 小时前
外贸独立站SEO优化全攻略:从0到1的完整指南
大数据·搜索引擎·seo优化·谷歌seo·google seo·独立站seo·外贸seo
RAOY的AI笔记5 小时前
GPT-6 Astra开发指南:API调用、工具使用与AI Agent应用思路
大数据·人工智能·gpt
麻辣布丁5 小时前
Git冲突原因与解决方法全解
大数据·git·elasticsearch
科技每日热闻5 小时前
中国企业出海开展业务,如何挑选可安全合规使用国际大模型的云平台?Amazon Bedrock 在同一平台完成国际模型接入、区域选择与合规治理
大数据·人工智能·安全·ai
SelectDB5 小时前
Apache Doris+ Paimon 2.0:构建 Agentic AI 数据闭环
大数据·数据库·数据分析
进击的横打6 小时前
【人工智能】AI时代公司组织架构的重构
大数据·人工智能·重构
YangYang9YangYan6 小时前
校招视角|财务数字化岗位 SQL、工具、项目完整备考指南
大数据·数据库·sql
光锥智能6 小时前
小鹏第一位机器人自己走下产线
大数据·人工智能
GISMagic6 小时前
Agent学习,写在开始之前
大数据·学习·agent
Capricorn19886 小时前
知芽 Notebook Skill 引用存在性校验与单元记忆破解幽灵引用危机
大数据·论文阅读·人工智能·论文笔记