当前位置: 首页 > news >正文

Flink系列-背压(反压)

目录

  • 了解背压
    • 什么是背压
    • 背压产生的原因
    • 背压导致的影响
  • 定位背压
  • 解决背压

了解背压

什么是背压

在流式处理系统中,如果出现下游消费的速度跟不上上游生产数据的速度,就种现象就叫做背压
(backpressure,也叫反压)

背压产生的原因

下游消费的速度跟不上上游生产数据的速度,可能出现的原因如下:

  1. 节点有性能瓶颈,可能是该节点所在的机器有网络、磁盘等等故障,机器的网络延迟和磁盘不
    足、频繁 GC、数据热点等原因。
  2. 数据源生产数据的速度过快,计算框架处理不及时。比如消息中间件 kafka,生产者生产数据过
    快,下游 flink 消费计算不及时。
  3. flink 算子间并行度不同,下游算子相比上游算子过小。

背压导致的影响

首先,背压不会直接导致系统的崩盘,只是处在一个不健康的运行状态。

  1. 背压会导致流处理作业数据延迟的增加。
  2. 影响到 Checkpoint,导致失败,导致状态数据保存不了,如果上游是 kafka 数据源,在一致性
    的要求下,可能会导致 offset 的提交不上。
    原理: 由于 Flink 的 Checkpoint 机制需要进行 Barrier 对齐,如果此时某个 Task 出现了背压,Barrier流动的速度就会变慢,导致 Checkpoint 整体时间变长,如果背压很严重,还有可能导致 Checkpoint超时失败。
  3. 影响 state 的大小,还是因为 checkpoint barrier 对齐要求。导致 state 变大。
    原理:接受到较快的输入管道的 barrier 后,它后面数据会被缓存起来但不处理,直到较慢的输入管道的 barrier 也到达。这些被缓存的数据会被放到 state 里面,导致 state 变大。

定位背压

  • 在 web 页面发现 fink 的 checkpoint 生成超时。
  • 查看 jobmanager 日志。
  • 在 BackPressure 界面直接可以看到。
    在这里插入图片描述
  • Metrics 监控背压。

解决背压

Flink不需要一个特殊的机制来处理背压,因为Flink中的数据传输相当于已经提供了应对背压的机制。
所以只有从代码上与资源上去做一些调整。

  1. 背压部分原因可能是由于数据倾斜造成的,我们可以通过 Web UI 各个 SubTask 的 指标值来
    确认。Checkpoint detail 里不同 SubTask 的 State size 也是一个分析数据倾斜的有用指标。
    解决方式把数据分组的 key 预聚合来消除数据倾斜。
  2. 代码的执行效率问题,阻塞或者性能问题。
  3. TaskManager 的内存大小导致背压。

相关文章:

  • 随机森林实战(分类任务+特征重要性+回归任务)(含Python代码详解)
  • 面向对象编程原则(02)——单一职责原则
  • C++面向对象程序设计(第2版)第二章(类和对象的特性)知识点总结
  • 学习springboot杂乱无章的笔记
  • java计算机毕业设计红河旅游信息服务系统源码+数据库+系统+lw文档+mybatis+运行部署
  • Pytorch 实战 LESSON 16 深度学习视觉入门 上
  • 10.VScode下载---Windows64x
  • java计算机毕业设计互联网保险网站源码+数据库+系统+lw文档+mybatis+运行部署
  • Linux14 NAT网络配置原理 查看网络ip和网关 修改ip地址 指定ip方法 主机名与hosts映射 主机名解析过程
  • SPDK Vhost在线恢复:让I/O飞一会儿
  • 如何判断一个低代码平台是否专业?
  • 达利欧《原则》读书思考笔记
  • C语言动态内存管理、柔性数组(超详细版)
  • 【USB设备设计】-- CDC 设备开发(虚拟串口设备)
  • 用ARM进行汇编语言编程(3)逻辑移位和轮换,条件与分支
  • 2019年如何成为全栈工程师?
  • HashMap剖析之内部结构
  • Javascript Math对象和Date对象常用方法详解
  • JAVA多线程机制解析-volatilesynchronized
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Just for fun——迅速写完快速排序
  • learning koa2.x
  • Leetcode 27 Remove Element
  • Linux CTF 逆向入门
  • magento 货币换算
  • Making An Indicator With Pure CSS
  • React-生命周期杂记
  • vue总结
  • 搭建gitbook 和 访问权限认证
  • 大整数乘法-表格法
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端攻城师
  • 设计模式走一遍---观察者模式
  • 数据科学 第 3 章 11 字符串处理
  • 学习JavaScript数据结构与算法 — 树
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​MySQL主从复制一致性检测
  • ​决定德拉瓦州地区版图的关键历史事件
  • #Linux(Source Insight安装及工程建立)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (java)关于Thread的挂起和恢复
  • (pojstep1.3.1)1017(构造法模拟)
  • (多级缓存)多级缓存
  • (附源码)springboot学生选课系统 毕业设计 612555
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Remoting(分离服务程序实现) - Part.3
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET实现之(自动更新)
  • @Transaction注解失效的几种场景(附有示例代码)
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [AIGC] Redis基础命令集详细介绍
  • [AIGC] SQL中的数据添加和操作:数据类型介绍