背景

        在使用flink的过程中,多次遇到过反压(backpressure)的问题,这通常是因为数据处理的速率超过了数据源或下游系统的处理能力导致。

反压的底层剖析

网络流控

        一个重要的概念是网络流控,如上图,不同的Consumer和Producer的消费和生产速率不一样,那么一定时候后,receive buffer和send buffer就肯定会满,导致生产端瘫痪。

为了能提前感知这一问题,引入了反压机制,增加了一个feedback:
在设计的过程中,会包含正反馈和负反馈,在反压的场景下,就是负反馈,让生产端降低发送速率,甚至停止发送。

Flink1.5以前的流控方式

在1.5以前,Flink基于TCP实现流控,如图:
我们知道TCP通过滑动窗口ack机制实现了流量控制,简单来说就是TCP接收端会在每次收到数据包后给发送端返回两个主要信息:

ACK=下次从哪个index继续发送
window=最多发送多少个字节


ack=8
window=1

如上表示从第8个字节继续发送,但只能发送1个,从而控制发送端的发送速度

拓展:如果返回window=0,代表接收端buffer已满,发送端会停止发送。为了知道什么时候可以继续发送,发送端会发送一个探测信号zeroWindowProbe来检测接收端的buffer情况。

Flink反压如何传播

简单来说,基于对接收缓冲区的剩余大小感知,如果下游的缓存区满了,信号会从下游不断传递给上游,直到所有算子的所有缓存区均打满。

至于是跨TaskManager还是TaskManager内部,反压的机制是同理的,主要关注不同边界的缓冲区情况。

跨taskManager的反压示意


taskManager内反压示意

基于TCP的反压机制的弊端

        虽然通过TCP可以实现反压机制,但是因为过于通用,还是产生了一些牺牲,因为一个taskManager内可能会有多个Task进行,而多个Task会复用一个socket进行传送(多路复用),如果某个task把tcp打满,会导致Task间相互影响

Flink1.5之后基于Credit-based的反压机制

        核心是通过Flink应用层来实现TCP流控的机制,避免影响底层tcp网络


如上图,通过ResultSubpartition这一层来控制,在每次发送内容的时候,发送端会带上自己剩余的内容大小,而接收端收到后也会反馈inputChannel的剩余大小。这样就可以跨过TCP、Netty这两层,也就可以避免一个TaskManager中多个Task的相互影响。

反压场景解决

        了解的反压的原理后,在面对Flink反压时,我们核心要分析出哪个环节慢了,然后通过调整并行度,资源分配、性能优化等手段进行解决。

具体case

后续补充

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day5-中间件与请求处理

昨天搞定了异步优化,今天来解决一些实际问题。Day4的API虽然性能不错,但还缺少一些企业级应用必备的功能。 现在的问题 前端无法访问API(跨域问题)没有请求日志,出问题难以排查错误信息格式不统一缺少统一的请求处理机…

【LeetCode热题100道笔记】反转链表

题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1:输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:输入:head [1,2] 输出:[2,1] 示例 3:…

Oracle:select top 5

在Oracle数据库中实现SELECT TOP 5功能需采用特定语法,因其原生不支持TOP关键字。以下是两种主流实现方式:‌ROWNUM结合子查询‌先通过子查询排序数据,再在外层用ROWNUM限制行数:SELECT * FROM ( SELECT * FROM 表名 ORDER BY 排序…

Kubernetes(k8s) 增量更新 po

文章目录前言k8s 增量更新 po1. 导出要新建po 的控制器配置2. 配置详解3. 重新生效前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在…

基于stm32的车辆安全驾驶预警系统

若该文为原创文章,转载请注明原文出处。一、 项目背景与引言(一) 研究背景及意义道路交通安全是全球性的重大公共安全问题。据统计,绝大多数交通事故源于驾驶员的危险状态(疲劳、分心、健康突发状况)和危险驾驶行为(超…

React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)

React 新创建组件语法知识点及案例代码 React 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。随着 React 的不断发展,创建组件的方式也在不断演进。本文将详细介绍 React 中创建组件的最新语法,包括函数组件(Functional Compo…

SQL Server全链路安全防护

SQL Server 的安全性是一个多层次、综合性的体系,旨在保护数据免受未授权访问、篡改和泄露。其核心安全机制可概括为以下几个方面:1. 身份验证(Authentication) Windows 身份验证: 使用 Windows 账户(域/本…

如何利用Web3提升企业竞争力

在这个信息爆炸的时代,Web3技术以其独特的去中心化、透明性和用户主权特性,成为企业提升竞争力的新战场。本文将深入探讨企业如何把握Web3的浪潮,实现业务的飞跃。 1. 把握Web3的核心价值 Web3的核心在于去中心化、透明性和用户主权。这种模式…

HOW - 在浏览器下载一个 Excel 表格文件

文章目录一、技术方案二、前端具体实现代码分析转换逻辑注意事项一、技术方案 后台返回 base64 数据 {code: 0,data: "base64;...", }前端进行数据格式转化并下载成 Excel 文件 这篇文章主要介绍第二个步骤的实现。 二、前端具体实现 代码 src/utils/transform…

【Android】Room数据库的使用

三三要成为安卓糕手 引入 Room是一个抽象层,对SQLite进行了封装,简化了SQLite数据库的操作,让开发者能以更加对象化的方式进行数据库操作;Room解决了SQLite操作繁琐,容易产生错误的问题,让开发者能以更加对…

Next.js 介绍:为什么选择它来构建你的下一个 Web 应用?

Next.js 介绍:为什么选择它来构建你的下一个 Web 应用? 作者:码力无边你好,欢迎来到我们的 Next.js 专栏!在接下来的 30 篇文章中,我们将一起踏上一段从入门到精通的旅程,深入探索这个强大而优雅…

开发环境 之 编辑器、编译器、IDE梳理

小生第一次学习编程时,懵懵搞不懂编辑器、编译器、IDE区别,虽然这对前期学习编程语言语法的影响不是很大,但是现在梳理一下,总归心里踏实些。 一、概念及区别 IDE是前面几者的集成,前面几个分别是IDE的子集。对比维度编…

高级RAG策略学习(六)——Contextual Chunk Headers(CCH)技术

Contextual Chunk Headers(CCH)技术深度解析 第一部分:理论基础与核心原理 一、核心定义:给 “文本块” 加 “上下文标签” Contextual Chunk Headers(上下文块标题,简称 CCH)本质是为文档拆分后…

人形机器人控制系统核心芯片从SoC到ASIC的进化路径

目录: 0 前言 1 人形机器人控制系统核心芯片选择ASIC而非SoC的理由 1.1 SoC的架构特征 1.2 ASIC的架构特征 1.3 SoC的优势(继承软件生态) 1.4 ASIC的优势(硬件底层算法就是应用层算法) 1.5 人形机器人控制系统核…

linux thread 线程一

thread线程是linux的重要概念。线程不能独立存在,必须在进程中存在。一个进程必须有一个线程,如果进程中没有创建新线程,进程启动后本身就有一个线程。使用getpid、getppid获取进程的进程ID和父进程ID。使用pthread_self获取到当前线程的ID。…

Arduino Nano33 BLESense Rev2【室内空气质量检测语音识别蓝牙调光台灯】

一、硬件介绍 1、产品特点 Arduino Nano 33 BLE Rev2,利用了nRF52840微控制器的先进功能。这款32位Arm Cortex-M4 CPU 64 MHz与MicroPython的兼容性增强了板子的灵活性,该开发板的突出特点是其蓝牙低功耗(BLE)功能,使…

【问题解决】mac笔记本遇到鼠标无法点击键盘可响应处理办法?(Command+Option+P+R)

背景 如题。鼠标无法点击,但可以移动。触控板能够波动,鼠标翻页能够work,但是点击后无法响应。 根因 电脑缓存问题 解决办法 重置PRAM: 确保电脑关机状态(可以先sudo shutdown -t now)(一定要确保&#xff…

23ai数据库通过SQLcl生成AWR报告

‌1. 查看现有快照SQL> awr list snap;SNAP_ID DBID BEGIN_INTERVAL_TIME END_INTERVAL_TIME FLUSH_LEVEL __________ _____________ __________________________________ __________________________________ ______________793 …

基于Django+Vue3+YOLO的智能气象检测系统

基于DjangoVue3YOLO的智能气象检测系统 项目简介 本项目是一个集成了人工智能深度学习技术的现代化气象检测系统,采用前后端分离架构,结合YOLO目标检测算法,实现了对气象现象的智能识别与分析。系统提供了完整的用户管理、实时检测、历史记录…

(4)什么时候引入Seata‘‘

非常好的问题!这两个问题正是技术选型时需要重点考虑的。什么时候需要引入 Seata?需要引入 Seata 的场景:跨数据库的分布式事务// 订单服务(MySQL) 库存服务(PostgreSQL) 账户服务&#xff08…