基於Flink秒級計算時CPU監控圖表數據中斷問題


 基於Flink進行秒級計算時,發現監控圖表中CPU有數據中斷現象,通過一段時間的跟蹤定位,該問題目前已得到有效解決,以下是解決思路:
 
一、問題現象
      以SQL02為例,發現本來10秒一個點的數據,有時會出現斷點現象,會少1-2個點甚至更多:
 
二、問題定位
  針對該問題,根據數據處理鏈路,制定了數據輸出跟蹤示意圖,如下所示:
 

 

    通過輸出的實際數據發現:
   1.監控Agent的數據已經正確上報Kafka
   2.從Kafka中可以正確取到監控Agent上報的數據
   3.從計算完畢的Kafka中取不到丟失點的數據
   4.從InfluxDB中取不到丟失點的數據
 
   因此定位到 數據是在Flink進行處理時丟失了,於是在Flink處理窗口中增加了輸出,以確認一個窗口起止時間以及實際計算的數據都有哪些:
 

   以下是一個時間窗口中的數據,可以發現數據報數時,亂序現象比較嚴重:

 

三、問題解決
 
 如果我們以10秒為一個窗口,以一分鍾為例,則Flink划分的計算時間窗口會如下所示:
 
[00:50,01:00)
[00:40,00:50)
[00:30,00:40)
[00:20,00:30)
[00:10,00:20)
[00:00,00:10)
 
 這里的窗口是一個前閉后開的時間段,也就是:[窗口 開始時間,窗口 結束時間)
 
 Flink基於Event Time+窗口+水位來解決亂序及延遲到達問題,當滿足以下條件時,觸發一個窗口里的數據進行計算:
 
a.水位時間>=窗口的結束時間
b.窗口中有需要計算的數據存在
 
當窗口已經觸發計算,默認情況下,后續到達的數據將會被丟棄,所以當延遲及亂序很嚴重時,水位(延遲時間)越小,被丟棄的可能性越大
 
當初為了能快速計算,設置的窗口大小是10秒,水位(延遲時間)是0.5秒,從前面輸出可以看到,數據亂序比較嚴重,加上傳輸延遲,設置的0.5秒時間太短,導致觸發窗口計算時,一些數據會被丟棄,從而導致監控圖表上出現斷點情況。
 
在窗口大小固定的情況下,要解決該問題,有兩個解決方案:
 
a.增加水位(延遲時間),先后調整到1秒、5秒、10秒(已經和窗口一樣大!)
b.調整監控數據報數時間,對於 監控插件類型的,固定首次報數時間是 整分鍾后2秒,保證每次報數,都落在同一個10秒內,且不會有太大亂序,也可以有效避免兩次報數落在同一個10秒內
 
目前在只進行了解決方案a的情況下,已經有效解決了該問題,但仍會偶爾出現1個斷點,實施方案b后,將從根本上解決該問題,同時可以進一步降低方案a的延遲時間,保證低延遲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM