taskmanager 傳輸資料時,不同的 taskmanager 上的兩個 subtask 間通常根據 key 的數量有多個 channel,這些 channel 會復用同乙個 taskmanager 級別的 tcp 鏈結,並且共享接收端 subtask 級別的 buffer pool。
在接收端,每個 channel 在初始階段會被分配固定數量的 exclusive buffer,這些 buffer 會被用於儲存接受到的資料,交給 operator 使用後再次被釋放。channel 接收端空閒的 buffer 數量稱為 credit,credit 會被定時同步給傳送端被後者用於決定傳送多少個 buffer 的資料。
在流量較大時,channel 的 exclusive buffer 可能會被寫滿,此時 flink 會向 buffer pool 申請剩餘的 floating buffer。這些 floating buffer 屬於備用 buffer,哪個 channel 需要就去**。而在 channel 傳送端,乙個 subtask 所有的 channel 會共享同乙個 buffer pool,這邊就沒有區分 exclusive buffer 和 floating buffer。
本地模擬,直接在idea中執行任務
需要配置引數如下:
configuration configuration = new configuration(); configuration.setstring("taskmanager.memory.process.size", "80mb"); configuration.setstring("taskmanager.memory.flink.size", "80mb"); configuration.setstring("taskmanager.memory.managed.size", "80mb"); configuration.setstring("taskmanager.memory.size", "80mb");
啟動引數增加:-xmx75m
流程配置:source並行度設定成10,aggregate設定成1
將source的休眠時間去掉,立馬壓滿source的outpool,source將不會再傳送訊息,等著後面處理完成
檢視flink web ui,back pressure會出現背壓是high的告警
選擇task metrics,outpoolusage是1.0即使用100%
告警是出現在source端,但是真正出現背壓的是在window operator
流程從source處卡住,無新訊息傳送,window operator還在處理訊息
如何分析及處理flink反壓
apache flink 高階教程(七):網路流控及反壓剖析
flink實戰 反壓機制與背壓指標計算原理
流處理系統必須能優雅地處理反壓 backpressure 問題,因為實時流處理必然會遇到這樣的場景 短時負載高峰導致系統接收資料的速率遠高於它處理資料的速率。反壓如果不能得到正確的處理,可能會導致資源耗盡甚至系統崩潰,目前主流的流處理系統storm spark streaming flink 都已經...
LED點陣屏中「鬼影」現象的分析與解決
鬼影 現象是指那些不該點亮的點隨機出現忽明忽暗的現象,產生的原因是在進行行切換時不可能同時完成行選和列選,兩個操作之間一定存在時差,這個時差時間內屏的顯示是錯誤的,這個錯誤的顯示就是鬼影。進行行選和列選的 如下 p1 p1 0xf0 row 行選 led panel st 0 列線輸出鎖存資料,上公...
爬蟲爬取方法分析與反爬蟲策略
爬蟲 spider 反爬蟲 anti spider 前言 網路爬蟲 spider或crawler 顧名思義,就是在網際網路上爬行的蟲子,那麼這只蟲子為什麼要在網上爬行呢?很簡單 收集資訊。在網際網路時代,誰掌握了資訊誰就把握了主動權。一,爬蟲部分一些簡單建議 1 儘量減少請求次數,2 能抓列表頁就不...