【Flink】浅谈Flink背压问题(1)

news2024/9/20 12:39:55

概述

在多线程的情况下有一个典型的模,型生产者消费者模型,该模型主要由生产者、消费者和一个大小固定的队列组成。生产者向队列发送数据,消费者从队列中取出数据并处理。

生产者消费者模型

针对上述模型,如果队列属于有限长度,当消费者能力<生产者能力的时候就会出现数据堆积,这样生产者的生产就会停止。现在将这个模型引入Flink算子链中,生产者和消费者的身份是相对的,一个生产者是上游的消费者,一个消费者同样也是下游的生产者。所以一个节点模型中消费者的堵塞将会向上移动,直到源头,这就是反压。

Flink数据通信模型

假如一个Flink任务(Job)中有 TaskA,TaskB,并发度都是 4,即 A1-A4,B1-B4。TaskA 与 TaskB 使用 keyby 连接。将这个 Flink Job 部署到 2 个 TM 中,每个 TM 分配 2 个 slots。那么Flink会将 A 1 , A 2 , B 1 , B 2 A1,A2,B1,B2 A1,A2,B1,B2 放到一个 TM 中, A 3 , A 4 , B 3 , B 4 A3,A4,B3,B4 A3,A4,B3,B4 放到一个 TM 中,具体示例如下图所示:

同一个 TM 中的SubTask采用 【local 】方式进行数据传输。位于不同 TM 的 SubTask采用【remote】方式传输。传输示意图如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDG7JBd6-1674134045215)(E:/Postgraduate/document/ASSESTS/%E3%80%90Flink%E3%80%91%E6%B5%85%E8%B0%88Flink%E8%83%8C%E5%8E%8B%E9%97%AE%E9%A2%98%EF%BC%881%EF%BC%89.assets/Flink-FlinkTM%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9E%8B%E6%80%BB%E7%BB%93_image_2.png)]

我们从上图可以看出,以SubTaskA1为例,其数据传输步骤如下:

  1. TaskA1 先通过 【RecordWriter】对象将数据序列化写到一个 【Output Queue Buffer】 中(下游的并行子任务个数就是队列的个数)。
  2. 由【 Netty Service 】进行拉取,满足以下任意一个条件都会进行拉取;
    1. 【Output Queue Buffer】 写满了(默认 32KB);
    2. 【Output Queue Buffer】 超时了(默认 100ms);
    3. 遇到特殊结构,例如 Barrier,WaterMark;
  3. 经过网络传输之后,数据会写到 TaskB3 中的 【Input Queue】 中,然后由 【RecordReader】对象将数据反序列化后进行处理。

也就是说一个 下游TM 中的并行子任务出现消费延迟,就会阻塞 TCP-channel 进而影响整个 TM 的消费,最终向上传递,导致反压。

反压的监控

Web UI

可以直接在 Flink Web 中进行观察,Flink检测会针对任何一个 Task 做反压检测。该机制需要在 Flink Web 上手动触发,触发后TM 使用 Thread.GetStackTrace 来抽样检测 Task Thread 是否在 NetworkBuffer 中,即是否处于等待状态。根据抽样比例,来判断反压状态。Ratio 是代表抽样 n 次(默认100次)中,遇到等待次数的比例。

  • OK:ratio≤0.1;
  • LOW:0.01≤Ratio≤0.5;
  • High:0.5≤Ratio≤1;

从 Sink→Source 进行检查,第一个反压状态处于 High 的 task 大概率是反压的根源。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s6HnrF2y-1674134045216)(E:/Postgraduate/document/ASSESTS/%E3%80%90Flink%E3%80%91%E6%B5%85%E8%B0%88Flink%E8%83%8C%E5%8E%8B%E9%97%AE%E9%A2%98%EF%BC%881%EF%BC%89.assets/Pasted%20image%2020220825113135.png)]

该方法有一定的缺陷:

  1. 由于他是抽样,无法观察到历史数据;
  2. 影响作业流程;
  3. 高并发场景下,需要等待很久才能检测成功;

Flink Network Metric

在上文提到过,TM之间的通信都会使用到 InputQueue 和 OutputQueue,我们可以通过使用【InputQueueUsage】 和 【OutputQueueUsage】这两个指标来判断出现反压的位置。

Task StatusOutputQueueUsage < 1.0OutputQueueUsage == 1.0
InputQueueUsage < 1.0正常处于反压,其根本原因可能是该 Task 下游处理能力不足导致,持续下去,该 Task 将会向上游传递反压
InputQueueUsage == 1.0处于反压,持续下去,该 Task 会向上游传递反压,而且该 Task 可能是反压的源头处于反压,原因可能是被下游阻塞

现在看一个实际的例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9yh1MbN5-1674134045216)(E:/Postgraduate/document/ASSESTS/%E3%80%90Flink%E3%80%91%E6%B5%85%E8%B0%88Flink%E8%83%8C%E5%8E%8B%E9%97%AE%E9%A2%98%EF%BC%881%EF%BC%89.assets/Pasted%20image%2020220825114331.png)]

从指标监控界面可以看出 FlatMap→Reduce 出现了阻塞,再看 reduce 任务的 inpoolusageoutpoolusage 指标,得出结论reduce任务就是反压的源头。

往期回顾

  1. 【分布式】浅谈CAP、BASE理论(1)

我将在下一期详细介绍反压形成的原因以及处理办法,敬请期待!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5执行Python脚本插件

1.启用UE5的Python脚本编辑器&#xff1a; 在Edit里面找到Plugins&#xff0c;然后打开插件管理器&#xff0c;搜索Python,找到 Python Editor Script Plugin并启用它。该插件也可能会自动启用&#xff08;至少我的UE5是这样的&#xff09;&#xff0c;如果已经自动启用&#…

python机器学习(一)算法学习的步骤、机器学习的应用及流程(获取数据、特征工程、模型、模型评估)

机器学习入门 机器学习中需要理论性的知识&#xff0c;如数学知识为微积分(求导过程&#xff0c;线性回归的梯度下降法)&#xff0c;线性代数(多元线性回归&#xff0c;高纬度的数据&#xff0c;矩阵等)&#xff0c;概率论(贝叶斯算法)&#xff0c;统计学(贯穿整个学习过程)&a…

Nginx使用(五)配置高可用集群示例

一、条件&#xff08;1&#xff09;需要两台Nginx服务器&#xff08;2&#xff09;需要keepalived&#xff08;3&#xff09;需要虚拟ip二、准备工作&#xff08;1&#xff09;需要两台服务器&#xff08;2&#xff09;在两台服务器安装nginx&#xff08;3&#xff09;在两台服…

Linux应用基础与实训小结

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

ElasticSearch安装及基本使用

文章目录0. 学习资料1. 概念2. 安装ESdocker安装1. **下载镜像**2. **创建实例**3. **浏览器访问&#xff1a;**4. 测试使用Kibana安装1. 下载镜像2. 创建实例3. 效果3. 检索_cat保存查询通过id查询乐观锁操作更新删除批量操作**导入测试数据**4. 进阶搜索基本检索参考文档基本…

将数据从Java Bean复制到另一个Java Bean

JavaBean复制的几种方式1&#xff1a;概述在实际编程过程中&#xff0c;我们常常要遇到这种情况&#xff1a;有一个对象A&#xff0c;在某一时刻A中已经包含了一些有效值&#xff0c;此时可能 会需要一个和A完全相同新对象B&#xff0c;并且此后对B任何改动都不会影响到A中的值…

P2T: Pyramid Pooling T ransformer for Scene Understanding

论文链接&#xff1a; https://arxiv.org/abs/2106.12011 中文版本&#xff1a; https://mmcheng.net/wp-content/uploads/2022/08/22PAMI_P2T_CN.pdf 代码链接&#xff1a; https://github.com/yuhuan-wu/P2T P2T: Pyramid Pooling T ransformer for Scene Understanding一、摘…

2023年网络安全比赛--JavaScript安全绕过中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.使用渗透机场景kali中工具扫描服务器,将服务器上apache版本号作为flag提交; 2.使用渗透机场景windows7访问服务其场景中的网站(网站路径为IP/javascript),找到网站首页中flag并提交; 3.使用渗透机场景windows7根据第二题的…

2. 拍照的基础知识

1. 单反相机的全称为单镜头反光相机 单反相机的原理就体现在“单”和“反”上&#xff0c;单字就是单镜头&#xff0c;就是说单反相机只能安装一个镜头&#xff0c;光线或是影像通过单反镜头进行来取景的。 对于“反”来说就是相机系统内部有一个反光板。光线通过单反镜头投射…

你应该知道的 7 个最受欢迎的 Python 机器学习库

2023年你应该知道的 7 个最受欢迎的 Python 机器学习库 33/100 发布文章 weixin_38037405 未选择任何文件 new 有一句谚语“你不必重新发明轮子”&#xff0c;工具库就是最好的例子。它可以帮助您以简单的方式编写复杂且耗时的功能。在我看来&#xff0c;一个好的项目会使用一些…

LeetCode分类刷题----字符串篇

字符串字符串1.反转字符串344.反转字符串541.反转字符串||2.替换空格剑指offer05.替换空格3.翻转字符串里的单词151.反转字符串里的单词4.左旋转字符串剑指 Offer 58 - II. 左旋转字符串5.实现strStr函数()28.实现strStr()函数6.重复的子字符串459.重复的子字符串字符串 1.反转…

YOLOv1学习笔记

来源&#xff1a;投稿 作者&#xff1a;ΔU 编辑&#xff1a;学姐 论文笔记 《You Only Look Once:Unifified, Real-Time Object Detection》 Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick , Ali Farhadi∗† University of Washington∗ , Allen Institute for A…

【JavaGuide面试总结】计算机网络·上

【JavaGuide面试总结】计算机网络上1.OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;2.TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;应用层传输层网络层网络接口层3.应用层有哪些常见的协议&#xff1f;4.为什么网络要分层&#xff1f;5.…

数据分析方法与模型

文章目录1 数据分析1.1 占比分析1.2 趋势分析1.3 对比分析1.4 象限分析1.5 排名分析1.6 维度分析2 分析模型2.1 费米问题-大致估算2.2 七问分析法-思考角度的拓展2.3 互联网通用模型AARRR、八角分析法2.3.1 AARRR2.3.2 游戏化用户增长策略-八角模型本文来源&#xff0c;为接地气…

基于RMI技术的数据库操作中间件设计 综合实践报告

前言 1.1 实践目的和要求 为了将理论用于实践,巩固所学知识,提高自己发现问题并用所学知识分析问题和解决问题的能力,锻炼自己的工作能力,适应社会能力,自我管理能力,了解目前软件的应用情况,需求情况,发展方向及前景。 要求&#xff1a; 要求在实习过程中认真学习技术知…

[疑难杂症2023-002]不就是Move一个文件吗,怎么会有这么多坑呢?

本文由Markdown语法编辑器编辑完成&#xff0e; 1. 前言: 近期在项目中遇到一个需求&#xff0e; 背景是&#xff0c;在一个QT封装的C/S架构的软件中&#xff0c;一个报告的预览页面&#xff0c;是由QT封装了QWebWidget, 里面放着一个网页&#xff0e;这个网页通过调用一定的…

论文解读 TOOD: Task-aligned One-stage Object Detection

github: https://github.com/fcjian/TOOD paper: https://arxiv.org/pdf/2108.07755.pdf 关键点 思考起点 指出传统one-stage算法在在优化目标分类和定位问题中的不足&#xff08;DecoupledHead分离了分类任务和回归任务[yolox表示解耦这是优点&#xff0c;yolo1-5都是使用y…

[oeasy]python0054_三引号_原样显示字符串_triple_quoted

三引号 回忆上次内容 \ 首先是转义字符 可以 和别的字符 构成转义序列 \a是 ␇ (bell),\b 退回一格\t 水平制表符\v、\f LineFeed\\ 输出 \\" 输出 "\ 输出 \xhh 通过 16 进制数值转义\nnn 通过 8 进制数值转义\ 还是 续行字符 放在 行尾可以让 下一行和本行 连成一…

Linux2

4.Linux的文件系统4.1.linux中所有的一切都是文件万事万物皆文件windows是盘符&#xff0c;linux是树windows是\&#xff08;翘&#xff09;linux是/4.2.查找文件方式&#xff1a;1. 绝对路径 有/2. 相对路径 4.3.挂载&#xff1a;执行挂载命令&#xff1a;mount 设备文件名 挂…

CentOS 安装 MinIO Server

1) 下载 MinIO 服务 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio sudo mv minio /usr/local/bin/ 2) 创建systemd服务文件 sudo vim /etc/systemd/system/minio.service [Unit] DescriptionMinIO Documentationhttps:…