反壓在流式系統中是一種很是重要的機制,主要做用是當系統中下游算子的處理速度降低,致使數據處理速率低於數據接入的速率時,經過反向背壓的方式讓數據接入的速率降低,從而避免大量數據積壓在flink系統中,最後系統沒法正常運行。flink具備自然的反壓機制,不須要經過額外的配置就可以完成反壓處理。web
當在flinkUI中切換到Backpressure頁籤時,flink纔會對整個job觸發反壓數據的採集,反壓過程對系統有必定的影響,主要由於jvm進程採樣成本較高。flink經過在TaskManager中採樣LocalBufferPool內存塊上的每一個Task的stackTrace實現。默認狀況下,TaskManager會觸發一百次採樣,而後將採樣的結果彙報給JobManager,最終經過JobManager進行彙總計算,得出反壓比例並在頁面中展現,反壓比例等於反壓出現次數/採樣次數。併發
經過在頁面中點擊Back Pressure頁籤觸發反壓檢測,整個採樣過程大約會持續5s,每次採樣的間隔爲50ms,持續100次。同時,爲了不讓TaskManager過多地採樣StackTrace,即便頁面被刷新,也要等待60s後才能觸發下一次Sampling過程。 jvm
經過觸發jvm進程採樣的方式獲取到反壓監控數據,同時flink會將反壓狀態分爲三個級別,分別爲OK、LOW、HIGH級別,其中OK對應的反壓比例爲大於0小於10%,LOW對應的反壓比例爲10%-50%,HIGH對應的反壓比例大於50%小於100%。優化
若是對task進行抽樣顯示,全部的subtasks狀態均顯示OK,表示未發生大規模的數據堵塞,系統總體運行正常,不須要作任何調整。進程
若是全部的subtasks狀態均顯示HIGH,表示系統觸發了比較多的反壓,須要適當的增長subtask併發度或者下降數據生產速度,不然通過長時間的運行後,系統中處理的數據將出現比較嚴重的超時現象。內存
針對反壓的優化,用戶能夠調整如下參數:監控