Flink 如何定位反压节点?
分析&回答
Flink Web UI 自带的反压监控 —— 直接方式
Flink Web UI 的反压监控提供了 Subtask 级别的反压监控。监控的原理是通过Thread.getStackTrace() 采集在 TaskManager 上正在运行的所有线程,收集在缓冲区请求中阻塞的线程数(意味着下游阻塞),并计算缓冲区阻塞线程数与总线程数的比值 rate。其中,rate < 0.1 为 OK,0.1 <= rate <= 0.5 为 LOW,rate > 0.5 为 HIGH。

Web UI 反压监控
以下两种场景可能导致反压:
- 该节点发送速率跟不上它的产生数据速率。该场景一般是单输入多输出的算子,例如FlatMap。定位手段是因为这是从 Source Task 到 Sink Task 的第一个出现反压的节点,所以该节点是反压的根源节点。
- 下游的节点处理数据的速率较慢,通过反压限制了该节点的发送速率。定位手段是从该节点开始继续排查下游节点。
注意事项:
- 因为Flink Web UI 反压面板是监控发送端的,所以反压的根源节点并不一定会在反压面板体现出高反压。如果某个节点是性能瓶颈并不会导致它本身出现高反压,而是导致它的上游出现高反压。总体来看,如果找到第一个出现反压的节点,则反压根源是这个节点或者是它的下游节点。
- 通过反压面板无法区分上述两种状态,需要结合 Metrics 等监控手段来定位。如果作业的节点数很多或者并行度很大,即需要采集所有 Task 的栈信息,反压面板的压力也会很大甚至不可用 。
Flink Task Metrics —— 间接方式
(1)回顾 Flink Credit-based 网络
Flink Credit-Based 网络
① TaskManager 之间的数据传输
不同的 TaskManager 上的两个 Subtask 通常情况下,channel 数量等于分组 key 的数量或者等于算子并发度。这些 channel 会复用同一个 TaskManager 进程的 TCP 请求,并且共享接收端 Subtask 级别的 Buffer Pool。
② 接收端
每个 channel 在初始阶段会被分配固定数量的独享 Exclusive Buffer,用于存储接收到的数据。算子 Operator 使用后再次释放 Exclusive Buffer。说明:channel 接收端空闲的 Buffer 数量称为 Credit,Credit 会被定时同步给发送端,用于决定发送多少个 Buffer 的数据。
③ 流量较大的场景
接收端,channel 写满 Exclusive Buffer 后,Flink 会向 Buffer Pool 申请剩余的 Floating Buffer。发送端,一个 Subtask 所有的 Channel 会共享同一个 Buffer Pool,因此不区分 Exclusive Buffer 和 Floating Buffer。
(2)Flink Task Metrics 监控反压
Network和 task I/Ometrics 是轻量级反压监视器,用于正在持续运行的作业,其中一下几个 metrics 是最有用的反压指标。

metrics反压指标
采用 Metrics 分析反压的思路:如果一个 Subtask 的发送端 Buffer 占用率很高,则表明它被下游反压限速了;如果一个 Subtask 的接受端 Buffer 占用很高,则表明它将反压传导至上游。

inPoolUsage和outPoolUsage反压分析表
解释:
① outPoolUsage 和 inPoolUsage 同为低表明当前 Subtask 是正常的,同为高分别表明当前 Subtask 被下游反压。
② 如果一个 Subtask 的 outPoolUsage 是高,通常是被下游 Task 所影响,所以可以排查它本身是反压根源的可能性。
③ 如果一个 Subtask 的 outPoolUsage 是低,但其 inPoolUsage 是高,则表明它有可能是反压的根源。因为通常反压会传导至其上游,导致上游某些 Subtask 的 outPoolUsage 为高。
注意:反压有时是短暂的且影响不大,比如来自某个 channel 的短暂网络延迟或者 TaskManager 的正常 GC,这种情况下可以不用处理。
下表把 inPoolUsage 分为 floatingBuffersUsage 和 exclusiveBuffersUsage,并且总结上游 Task outPoolUsage 与 floatingBuffersUsage 、 exclusiveBuffersUsage 的关系,进一步的分析一个 Subtask 和其上游 Subtask 的反压情况。

正在上传…重新上传取消
outPoolUsage 与 floatingBuffersUsage 、 exclusiveBuffersUsage 的关系表
- floatingBuffersUsage 为高则表明反压正在传导至上游。
- exclusiveBuffersUsage 则表明了反压可能存在倾斜。如果floatingBuffersUsage 高、exclusiveBuffersUsage 低,则存在倾斜。因为少数 channel 占用了大部分的 floating Buffer(channel 有自己的 exclusive buffer,当 exclusive buffer 消耗完,就会使用floating Buffer)。
3 Flink 如何分析反压
上述主要通过 TaskThread 定位反压,而分析反压原因类似一个普通程序的性能瓶颈。
(1)数据倾斜
通过 Web UI 各个 SubTask 的 Records Sent 和 Record Received 来确认,另外 Checkpoint detail 里不同 SubTask 的 State size 也是一个分析数据倾斜的有用指标。解决方式把数据分组的 key 进行本地/预聚合来消除/减少数据倾斜。
(2)用户代码的执行效率
对 TaskManager 进行 CPU profile,分析 TaskThread 是否跑满一个 CPU 核:如果没有跑满,需要分析 CPU 主要花费在哪些函数里面,比如生产环境中偶尔会卡在 Regex 的用户函数(ReDoS);如果没有跑满,需要看 Task Thread 阻塞在哪里,可能是用户函数本身有些同步的调用,可能是 checkpoint 或者 GC 等系统活动。
(3)TaskManager 的内存以及 GC
TaskManager JVM 各区内存不合理导致的频繁 Full GC 甚至失联。可以加上 -XX:+PrintGCDetails 来打印 GC 日志的方式来观察 GC 的问题。推荐TaskManager 启用 G1 垃圾回收器来优化 GC。
喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!
相关文章:
Flink 如何定位反压节点?
分析&回答 Flink Web UI 自带的反压监控 —— 直接方式 Flink Web UI 的反压监控提供了 Subtask 级别的反压监控。监控的原理是通过Thread.getStackTrace() 采集在 TaskManager 上正在运行的所有线程,收集在缓冲区请求中阻塞的线程数(意味着下游阻…...
LeetCode-1005-K次取反后最大化的数组和-贪心算法
题目描述: 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能的最大和 。 …...
Linux内核源码分析 (5)多处理器调度
Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注:本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA (非一致内存访问结构) 二、多核调度三、调度域和调度组四、SMP调度详…...
华为云云服务器评测|华为云云耀云服务器L实例使用教学
文章目录 教学小故事 教学 华为云云耀云服务器L实例是一款提供高效、可靠、安全的基础设施服务的云服务器。下面是使用教学: 登录华为云官网。 测评产品链接:https://www.huaweicloud.com/product/hecs-light.html 进入云耀云服务器管理控制台…...
这个在线网站让你三分钟制作出一份精美简历
今天,我要向大家推荐一个神奇的在线工具网站,它能够提供免费简历模板、简历范文,支持在线编辑,并且一键下载为PDF。这个工具让你的简历制作变得轻松便捷! 首先,这个网站的简历模板非常丰富多样。无论你是刚…...
Sql 函数传递参数 字符串拼接
使用场景 一个计算价格的函数,多个存储过程调用,因业务需求经常要新增参数,避免修改函数时程序执行存储过程报错,将多个参数拼接为一个字符串传递 -- 调用函数CalcuPrice(UnitPrice,CONCAT(MFQZC,MFQZC,&ItemNum,ItemNum,&am…...
java八股文面试[多线程]——两个线程交替打印1-100之间的数字
一份代码,两个线程,使用synchronize实现: 重写run()方法,将输出1到100之间整数的代码写到同步方法里。线程1进入到同步方法,输出一个整数后,阻塞并释放锁。线程2进入到同步方法,唤醒线程1&…...
gRPC之gRPC认证
1、gRPC认证 前面篇章的gRPC都是明文传输的,容易被篡改数据,本章将介绍如何为gRPC添加安全机制。 gRPC默认内置了两种认证方式: SSL/TLS认证方式 基于Token的认证方式 同时,gRPC提供了接口用于扩展自定义认证方式。 1.1 TLS…...
简易虚拟培训系统-UI控件的应用3
目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中,本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…...
语言模型(language model)
文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…...
【3.Vue子组件调用父组件方法】
1.概述 使用组件建抛出事件的方式来调用父组件的方法,不直接用this.$parent.function的方法,当然这种方式是可以的。 2.代码实现 2.1 父组件代码 父组件写一个方法给子组件调用 // 设备点击事件// equipId:设备id// leftValue:left值// topValue:top…...
算法系列-876-求链表的中间节点
求链表中间节点,如果有两个中间节点取后面那个 链表定义 // lc codestart /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(…...
h5 ws 客户端 监听ws服务器广播的信息
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>AI智能写作</title><!-- Bootstrap CSS --><meta charset"utf-8"><meta name"viewport" content"widt…...
网络基础之重中之重
目录 IP协议 编辑 基本概念: 协议头格式: 编辑 网段划分 DHCP : CIDR: 特殊的IP地址: IP地址的数量限制: 私有IP和公网IP 路由 路由的过程: 数据链路层 认识以太网&#x…...
HarmonyOS应用开发者-----基础认证试题及答案
HarmonyOS应用开发者基础认证试题及答案 试题会不定时刷新,本试题仅供大家学习参考 【判断题】 2.5/2.5 所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 正确(True)错误(False) 回答正确【判断题】 2.5/2.5 在Column和Row容器组…...
C++:string并非以0作为结束符,c_str和data的返回却包含结束符0
C语言中使用char数组保存字符串时,是以字符为0或者\0作为字符串的结束符标志的。 所以一个char str[10]的数组只能合法的保存9个字符(因为最后还要加一个结束符)。 #include <cstring> #include <iostream>using namespace std;int main() {char str[10] ="…...
ChatGPT插件的优缺点
虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”( Code Interpreter)的教育应用潜力,但他们也发现,对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说,这款插…...
北京985学校,交叉学科考英一数三408
北京师范大学(B) 考研难度(☆☆☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1096字,预计阅读:3分钟 2023考情概况 北…...
ChatGPT 总结前端HTML, JS, Echarts都包含哪些内容
AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.csdn.cn/zBytu...
企业架构LNMP学习笔记1
项目开发流程: 公司老板或者产品经理,根据市场调查,决定开发一整套互联网产品。 互动社交电商用户论坛(BBS) 产品决策 (老板产品UI设计) 业务实施、代码开发 程序开发人员 前端开发&#x…...
VideoAgentTrek Screen Filter快速集成:为现有Web应用添加视频安全审核功能
VideoAgentTrek Screen Filter快速集成:为现有Web应用添加视频安全审核功能 1. 引言 如果你正在运营一个允许用户上传视频的Web应用,比如社交平台、在线教育网站或者内容社区,那么“内容安全”这四个字,可能已经让你头疼过不止一…...
广汽埃安品牌车型AION UT在奥地利麦格纳工厂正式量产启动并成功下线 | 美通社头条
、美通社消息:3月18日,广汽欧洲业务发展迎来重要里程碑——旗下埃安品牌车型AION UT在奥地利麦格纳(Magna)工厂正式实现量产启动(SOP)并成功下线,标志着广汽在欧洲本地化战略迈入实质性推进阶段。AION UT是广汽欧洲本地化战略的重要核心车型&…...
提升开发效率的字体优化指南:Source Code Pro个性化配置实践
提升开发效率的字体优化指南:Source Code Pro个性化配置实践 【免费下载链接】source-code-pro Monospaced font family for user interface and coding environments 项目地址: https://gitcode.com/gh_mirrors/so/source-code-pro 长时间编码导致的视觉疲劳…...
Qwen3-Reranker-0.6B效果展示:代码搜索Query ‘Python list to dict‘重排
Qwen3-Reranker-0.6B效果展示:代码搜索Query Python list to dict重排 今天咱们来聊聊一个特别实用的AI工具——Qwen3-Reranker-0.6B。你可能听说过各种大语言模型,但这个模型有点不一样,它专门干一件事:帮你从一堆文本里找出最相…...
【信号处理实战】从原理到代码:手把手实现三次样条插值
1. 三次样条插值:从数学定义到生活场景 想象你正在用一根柔软的弹性尺子连接一组图钉,这些图钉固定在木板上代表你的数据点。这根尺子需要光滑地穿过每一个图钉,同时保持自然的弯曲形态——这就是三次样条插值要解决的问题。作为信号处理中最…...
【vue2+onlyoffice】从零搭建文档预览与协同编辑环境
1. OnlyOffice基础认知与版本选择 第一次接触OnlyOffice时,我盯着官网琳琅满目的版本说明发了半小时呆。这就像去买车,销售给你介绍基础版、豪华版、旗舰版,每个版本都说着"更适合企业需求"的套话。经过三个项目的实战验证…...
UE5 Pixel Streaming配置HTTPS全流程:从证书申请到成功运行(避坑指南)
UE5 Pixel Streaming HTTPS配置实战:从零搭建到安全部署的完整指南 在虚幻引擎5(UE5)的实时交互应用开发中,Pixel Streaming技术正成为连接3D内容与终端用户的重要桥梁。而HTTPS协议的配置,则是确保数据传输安全性的关…...
什么是JVM——餐厅类比
目录 一、核心前提 二、JVM 整体定位(餐厅类比总纲) 三、JVM 核心模块拆解(餐厅类比 1:1 对应) 模块 1:类加载器子系统 → 餐厅 “收单 归档员” 核心动作: 关键补充(对应你的内存疑问&a…...
STM32智能车库管理系统设计与实现
基于STM32的智能车库管理系统设计与实现 1. 项目概述 1.1 系统架构 本系统采用双MCU架构设计,主控制器采用STM32系列单片机,负责传感器数据采集、本地显示和报警控制;网络通信模块采用ESP8266 WiFi模块,实现数据上传至云平台。系…...
OpenClaw+GLM-4.7-Flash:自动化技术文档翻译系统
OpenClawGLM-4.7-Flash:自动化技术文档翻译系统 1. 为什么需要自动化翻译系统 作为一名经常需要阅读英文技术文档的开发者,我长期被两个问题困扰:一是专业术语翻译不统一,同一份文档里"pipeline"可能被翻译成"管…...
