【Flink精讲】Flink反压调优

Flink 网络流控及反压的介绍:

Apache Flink学习网

反压的理解

        简单来说, Flink 拓扑中每个节点(Task)间的数据都以阻塞队列的方式传输,下游来不及消费导致队列被占满后,上游的生产也会被阻塞,最终导致数据源的摄入被阻塞。反压(BackPressure) 通常产生于这样的场景:短时间的负载高峰导致系统接收数据的速率远高于它处理数据的速率。许多日常问题都会导致反压,例如,垃圾回收停顿可能会导致流入的数据快速堆积,或遇到大促、秒杀活动导致流量陡增。

反压的危害

        反压如果不能得到正确的处理, 可能会影响到 checkpoint 时长和 state 大小,甚至可能会导致资源耗尽甚至系统崩溃。
        1)影响 checkpoint 时长: barrier 不会越过普通数据,数据处理被阻塞也会导致checkpoint barrier 流经整个数据管道的时长变长, 导致 checkpoint 总体时间(End to End Duration)变长。
        2)影响 state 大小: barrier 对齐时,接受到较快的输入管道的 barrier 后,它后面数据会被缓存起来但不处理,直到较慢的输入管道的 barrier 也到达,这些被缓存的数据会被放到 state 里面,导致 checkpoint 变大。
        这两个影响对于生产环境的作业来说是十分危险的,因为 checkpoint 是保证数据一致性的关键, checkpoint 时间变长有可能导致 checkpoint 超时失败,而 state 大小同样可能拖慢 checkpoint 甚至导致 OOM (使用 Heap-based StateBackend)或者物理内存使用超出容器资源(使用 RocksDBStateBackend)的稳定性问题。
        因此,我们在生产中要尽量避免出现反压的情况。

利用 Flink Web UI 定位

        Flink Web UI 的反压监控提供了 SubTask 级别的反压监控, 1.13 版本以前是通过周期性对 Task 线程的栈信息采样,得到线程被阻塞在请求 Buffer (意味着被下游队列阻塞)的频率来判断该节点是否处于反压状态。默认配置下,这个频率在 0.1 以下则为 OK, 0.1至 0.5 为 LOW,而超过 0.5 则为 HIGH。
        Flink 1.13 优化了反压检测的逻辑(使用基于任务 Mailbox 计时,而不在再于堆栈采样),并且重新实现了作业图的 UI 展示: Flink 现在在 UI 上通过颜色和数值来展示繁忙和反压的程度。

分析瓶颈算子

        如果处于反压状态,那么有两种可能性:
        (1) 该节点的发送速率跟不上它的产生数据速率。这一般会发生在一条输入多条输出的 Operator(比如 flatmap)。 这种情况,该节点是反压的根源节点,它是从 Source Task到 Sink Task 的第一个出现反压的节点。
        (2) 下游的节点接受速率较慢,通过反压机制限制了该节点的发送速率。 这种情况,需要继续排查下游节点,一直找到第一个为 OK 的一般就是根源节点。总体来看,如果我们找到第一个出现反压的节点,反压根源要么是就这个节点,要么是它紧接着的下游节点。
        通常来讲,第二种情况更常见。 如果无法确定,还需要结合 Metrics 进一步判断。 

利用 Metrics 定位

        监控反压时会用到的 Metrics 主要和 Channel 接受端的 Buffer 使用率有关,最为有用的是以下几个 Metrics:

        其中 inPoolUsage = floatingBuffersUsage + exclusiveBuffersUsage。

1)根据指标分析反压
分析反压的大致思路是:如果一个 Subtask 的发送端 Buffer 占用率很高,则表明它
被下游反压限速了;如果一个 Subtask 的接受端 Buffer 占用很高,则表明它将反压传导
至上游。反压情况可以根据以下表格进行对号入座(1.9 以上):

2) 可以进一步分析数据传输
Flink 1.9及以上版本,还可以根据 floatingBuffersUsage/exclusiveBuffersUsage 以及其上游 Task 的 outPoolUsage 来进行进一步的分析一个 Subtask 和其上游Subtask 的数据传输。
在流量较大时, Channel 的 Exclusive Buffer 可能会被写满,此时 Flink 会向 Buffer Pool 申请剩余的 Floating Buffer。这些 Floating Buffer 属于备用 Buffer。

总结:
        1) floatingBuffersUsage 为高, 则表明反压正在传导至上游
        2) 同时 exclusiveBuffersUsage 为低, 则表明可能有倾斜
        比如, floatingBuffersUsage 高、 exclusiveBuffersUsage 低为有倾斜,因为少数channel 占用了大部分的 Floating Buffer。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泪滴中的关怀:新生儿泪腺堵塞及细心照料

引言 新生儿的眼睛是他们与世界沟通的桥梁,而泪腺则是这座桥梁上的一颗璀璨明珠。然而,有时这颗明珠可能会遇到困难,泪腺堵塞是一个常见的问题。在这篇文章中,我们将探讨新生儿泪腺堵塞的注意事项,以及如何细心照料宝…

算法价值6-梯度下降

梯度下降算法(gradient descent algorithm)是一种常用的优化算法,用于寻找函数的最小值点或最小化损失函数。它的核心思想是通过迭代调整参数的值,使目标函数的值逐渐趋于最小值。 具体来说,梯度下降算法的步骤如下: 1. 初始化参数 首先,需要初始化待优化的参数,可以…

vue3自定义实现悬浮固定按钮组件

目录 一、需求描述二、代码解读三、结果展示 一、需求描述 需要5个固定的悬浮圆,居于页面的右侧。鼠标悬浮在圆上面会显示对应的文字提示其中包含返回顶部悬浮圆,当页面滑至底部时出现,点击页面滑到顶部。点击按钮会给出弹窗 二、代码解读…

Fastapi进阶用法,路径参数,路由分发,查询参数等详解

文章目录 1、路径操作1.路径操作装饰器1.tags 标签2.summary 接口描述的总结信息3.describe: 接口信息的详细描述4.response_description:响应描述5.deprecated:接口是否废弃,默认是False 2.fastapi路由分发include_router 2、请求与响应2.1、…

Web APIs 3 事件

Web APIs 3 事件 一、事件流事件捕获事件冒泡阻止冒泡解绑事件鼠标经过事件的区别两种注册事件的区别 二、事件委托阻止默认行为 三、其他事件① 页面加载事件② 元素滚动事件滚动到指定的坐标 ③ 页面尺寸事件 元素尺寸与位置① 元素在页面中的位置② 元素尺寸 一、事件流 事…

ABBYY FineReader16文档转换、PDF管理与文档比较功能介绍

ABBYY FineReader 16作为一款OCR和PDF一体化程序,其强大的功能使得文档处理变得简单高效。在众多功能中,文档转换、PDF管理和文档比较这三大功能尤为突出,成为了众多企业和个人用户的首选工具。 ABBYY Finereader 16-安装包下载如下&#xff…

【接口测试】POST请求提交数据的三种方式及Postman实现

1. 什么是POST请求? POST请求是HTPP协议中一种常用的请求方法,它的使用场景是向客户端向服务器提交数据,比如登录、注册、添加等场景。另一种常用的请求方法是GET,它的使用场景是向服务器获取数据。 2. POST请求提交数据的常见编…

YOLOv6、YOLOv7、YOLOv8网络结构图(清晰版)

承接上一篇博客:YOLOv3、YOLOv4、YOLOv5、YOLOx的网络结构图(清晰版)_yolox网络结构图-CSDN博客 1. YOLOv6网络结构图 2. YOLOv7网络结构图 3. YOLOv8网络结构图

一文讲清DTO、BO、PO、VO

DTO、BO、PO、VO是什么? 在后端开发中,比如传统的MVC架构和现在流行的DDD架构,经常会使用到下列几种对象的概念 DTO (Data Transfer Object) 数据传输对象: DTO设计模式用于将数据从服务端传输到客户端,或者在不同的…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候,比如需要开发一个新功能,这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上,然后拉取一个新的分支【gateway】,然后在 gateway分支上进…

数据安全-动态加密(不同敏感字段使用不同的加密算法-MySQL、Oracle版本)

动态数据加密 动态加密(也称实时加密,透明加密等,其英文名为encrypt on-the-fly),是指数据在使用过程中自动对数据进行加密或解密操作,无需用户的干预,合法用户在使用加密的文件前,…

天翼云登录参数JavaSrcipt逆向

天翼云登录参数 password 、comParam_curTime、comParam_seqCode、comParam_signature JavaSrcipt逆向 目标网站 https://m.ctyun.cn/wap/main/auth/login?redirect/my 目标参数 要逆向的有 password、comParam_curTime、comParam_seqCode、comParam_signature 四个参数 …

【摸鱼日常】使用Docker部署2048小游戏

一、本次实践介绍 ​1. 本次实践简介 本次实践部署环境为个人测试环境,快速使用docker部署2048小游戏。 rootWellDone:/home/goodjob# uname -aLinux WellDone 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_64…

从零开始手写mmo游戏从框架到爆炸(二十四)— 装备系统二

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 本章主要是补充装备工厂,增加根据野怪等级和品质获得装备的方法: 增加的代码如下- EquipmentFactory: public static Equipment createEquipment(Monste…

pyspark分布式部署随机森林算法

前言 分布式算法的文章我早就想写了,但是一直比较忙,没有写,最近一个项目又用到了,就记录一下运用Spark部署机器学习分类算法-随机森林的记录过程,写了一个demo。 基于pyspark的随机森林算法预测客户 本次实验采用的…

目标检测-Transformer-ViT和DETR

文章目录 前言一、ViT应用和结论结构及创新点 二、DETR应用和结论结构及创新点 总结 前言 随着Transformer爆火以来,NLP领域迎来了大模型时代,成为AI目前最先进和火爆的领域,介于Transformer的先进性,基于Transformer架构的CV模型…

240Hz高刷电竞显示器 - HKC VG253KM

🎉🎉🎉 各位电竞爱好者们,今天给大家带来一款神秘武器,一款能够让你在游戏中大展拳脚的高刷电竞显示器 - HKC VG253KM!🔥🔥🔥 这款显示器,哎呀,真…

【Vue3】插槽使用和animate使用

插槽使用 插槽slot匿名插槽具名插槽插槽作用域简写 动态插槽transition动画组件自定义过渡class类名如何使用animate动画库组件动画生命周期appear transition- group过渡列表 插槽slot 插槽就是子组件中提供给父组件使用的一个占位符父组件可以在这个占位符智能填充任何模板代…

深度学习 精选笔记(3)线性神经网络-线性回归

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

spring boot 集成科大讯飞星火认知大模型

首先到官网https://console.xfyun.cn/services/aidoc申请key 一、安装依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…