日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flink背压问题处理(还没弄完)

發布時間:2023/12/31 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flink背压问题处理(还没弄完) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂的背壓就是反壓(backpressure)

什么是背壓問題

流系統中消息的處理速度跟不上消息的發送速度,導致消息的堆積。如果系統能感知消息堆積,并調整消息發送的速度。 使消息的處理速度和發送速度相協調就是有背壓感知的系統。背壓如果不能得到正確地處理,可能會導致資源被耗盡或者 甚至出現更糟的情況導致數據丟失。flink就是一個有背壓感知的基于流的分布式消息處理系統。?

舉例說明: 1.正常情況:消息處理速度>=消息的發送速度,不發生消息擁堵,系統運行流暢?

?

?2.異常情況:消息處理速度< 消息的發送速度,發生了消息擁堵,系統運行不暢。?

?消息擁堵可以采取兩種方案 a.將擁堵的消息直接刪除,將會導致數據丟失,在精確到要求高的場景非常不合適 b.將擁堵的消息緩存起來,并告知消息發送者減緩消息發送的速度。 3.處理方法:將緩沖區持久化,以方便在處理失敗的情況下進行數據重放。 有些source本身提供持久化保證,可以優先考慮。例如: Apache Kafka是一個很不錯的選擇,可以背壓從sink到source 的整個pipeline,同時對source進行限流來適配整個pipeline中最慢組件的速度,從而獲得系統的穩定狀態。?

flink中的背壓

Flink使用分布式阻塞隊列來作為有界緩沖區。如同Java里通用的阻塞隊列跟處理線程進行連接一樣,一旦隊列達到容量上限, 一個相對較慢的接受者將拖慢發送者。 舉例說明: 圖中有一個簡單的flow,它由兩個task組成?

?

1、記錄“A”進入Flink,然后被Task 1處理

2、Task 1處理后的結果被序列化進緩沖區

3、task 2從緩沖區內讀取一些數據,緩沖區內將有更多的空間。

4、如果task 2處理的較慢,task1的緩存區將很快填滿。發送速度隨之下降。 注意:為了記錄能被Flink處理,緩沖區必須是可用的

flink背壓的兩種場景

1.本地傳輸?

?如果task1和task2都運行在同一個工作節點(TaskManager),緩沖區可以被直接共享給下一個task,一旦task 2消費了數據它會 被回收。如果task 2比task 1慢,buffer會以比task 1填充的速度更慢的速度進行回收從而迫使task降速。

2.網絡傳輸?

如果task 1和task 2運行在不同的工作節點上。一旦緩沖區內的數據被發送出去(TCP Channel),它就會被回收。在接收端,數據被 拷貝到輸入緩沖池的緩沖區中,如果沒有緩沖區可用,從TCP連接中的數據讀取動作將會被中斷。輸出端通常以watermark機制來保證不 會有太多的數據在傳輸途中。如果有足夠的數據已經進入可發送狀態,會等到情況穩定到閾值以下才會進行發送。這可以保證沒有太多的 數據在路上。如果新的數據在消費端沒有被消費(因為沒有可用的緩沖區),這種情況會降低發送者發送數據的速度。

flink背壓的性能測試

下面這張圖顯示了:隨著時間的改變,生產者(黃色線)和消費者(綠色線)基于所達到的最大吞吐(在單一JVM中每秒達到8百萬條記錄) 的平均吞吐百分比。我們通過衡量task每5秒鐘處理的記錄數來衡量平均吞吐。?

首先,我們運行生產者task到它最大生產速度的60%(我們通過Thread.sleep()來模擬降速)。消費者以同樣的速度處理數據。 然后,我們將消費task的速度降至其最高速度的30%。你就會看到背壓問題產生了,正如我們所見,生產者的速度也自然降至其最高速度的30%。

接著,我們對消費者停止人為降速,之后生產者和消費者task都達到了其最大的吞吐。接下來,我們再次將消費者的速度降至30%,pipeline給出了立即響應:生產者的速度也被自動降至30%。

最后,我們再次停止限速,兩個task也再次恢復100%的速度。這所有的跡象表明:生產者和消費者在pipeline中的處理都在跟隨彼此的吞吐而進行適當的調整,這就是我們在流pipeline中描述的行為。

flink背壓的總結

Flink與持久化的source(例如kafka),能夠為你提供即時的背壓處理,而無需擔心數據丟失。Flink不需要一個特殊的機制來處理背壓, 因為Flink中的數據傳輸相當于已經提供了應對背壓的機制。因此,Flink所獲得的最大吞吐量由其pipeline中最慢的部件決定。

?

上述內容轉載自[1],扯白了就是Flink自帶的隊列扛不住了。

Reference:

[0]《flink中的背壓的處理原理》

[1]Flink如何應對背壓問題

[2]How Apache Flink? handles backpressure

[3]flink的背壓問題產生原因和解決方法

[4]Flink 背壓問題排查的梳理

[5]Flink :網絡流控及反壓剖析

?

?

總結

以上是生活随笔為你收集整理的flink背压问题处理(还没弄完)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。