Flink反壓問題

背景

????????在使用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…