天天看點

flink源碼分析_Flink 全鍊路端到端延遲的測量方法

點選上方“zhisheng”,選擇“設為星标”

背景回複”ffa“可以檢視 Flink 資料

一、背景

FLink Job端到端延遲是一個重要的名額,用來衡量Fl ink任務的整體性能和響應延遲(大部分流式應用,要求低延遲特性)。 通過流處理引擎競品對比,我們發現大部分流計算引擎産品,都在告警監控頁面,內建了全鍊路時延名額展示。 一些低延時的處理場景,例如用于登陸、使用者下單規則檢測,實時預測場景,需要一個可度量的Metric名額,來實時觀測、監控叢集全鍊路時延情況。

二、源碼分析來源

1、本文的源碼分析基于FLink社群issue FLINK-3660,以及issue對應的pr源碼pull-2386,另外,個人也新增了實作源碼的說明。 2、其pr源碼中隻涉及到了部分全鍊路時延實作代碼,是以,我在文章中總結了:

  • Source到Sink處理Latency Marker源碼
  • LatencyMarksEmitter 送出時延标記類
  • LatencyStats(時延直方圖Metric實作)源碼
  • 時延測量–整體架構圖

三、騰訊Oceanus監控名額參考

如下圖,紅色框線對應的資料延時,即我們描述的名額

flink源碼分析_Flink 全鍊路端到端延遲的測量方法
flink源碼分析_Flink 全鍊路端到端延遲的測量方法

四、Flink LatencyMarker實作思路

在webinterface中,加入流式job的端到端延遲是一個重要特性。 是以,FLink社群最初的想法是在每個記錄的source上附加一個攝取時間( ingestion -time)時間戳。 然而,這為不使用monitor feature(監控功能)的使用者,帶來了額外開銷(每個元素+每個元素上的System.currentTimeMilis()需要8個位元組)。 是以,FLink社群最後決定,通過定期發送特殊事件來實作此功能,類似于通過拓撲發送水印watermark。 這些特殊事件(LatencyMarker)在source上以可配置發送間隔,并由任務Task轉發。 Sink最後接收到LatencyMarks後,将比較LatencyMarker的時間戳與目前系統時間,以确定延遲。 LatencyMarker不會增加作業的延遲,但是LatencyMarker與正常記錄類似,可以被delay阻塞(例如反壓情況),是以LatencyMarker的延遲與Record延遲近似。 上述建議期望所有任務管理器TaskManager上的時鐘是同步的。 否則,測量的延遲也包括TaskManager時鐘之間的偏移。 後續,我們可以嘗試通過使用JobManager作為計時服務中心(central timing service)來緩解這個問題。 taskmanager将定期查詢JM的目前時間,以确定其時鐘的偏移量。 這個偏移量仍然包括TM和JM之間的網絡延遲,但是仍然比較好的測量時延。

五、Flink LatencyMarker實作源碼

本章節對應到pr源碼pull-2386的實作,這裡簡要說明。

flink源碼分析_Flink 全鍊路端到端延遲的測量方法

Flink源碼中,引入了一個新的StreamElement,稱為LatencyMarker。 與水印類似,LatencyMarker按配置的間隔從源發出。 這個時間間隔的預設值是0毫秒,即不觸發 (配置項在ExecutionConfig#latencyTrackingInterval,名稱metrics.latency.interval),例如可以配置成2000毫秒觸發一次LatencyMarker發送。 LatencyMarker不能“多于”正常元素。 這確定了測量的延遲接近于正常流元素的端到端延遲。 正常操作符Operator(不包括那些參與疊代的Operator)如果不是sink,就會轉發延遲标記LatencyMarker。 具有多個輸出channel的Operator,随機選擇一個channel通道,将LatencyMarker發送給它。 這可以確定每個LatencyMarker标記在系統中隻存在一次,并且重新分區步驟不會導緻傳輸的LatencyMarker數量激增。

上述RecordWriterOutput#emitLatencyMarker()會被StreamSource、AbstractStreamOperator調用,分别實作source和中間operator的延遲标記下發

如果操作符Operator是Sink,它将維護每個已知source執行個體的最後512個LatencyMarker資訊。 每個已知source的最小/最大/平均值/p50/p95/p99時延,在sink的LatencyStats對象中,進行彙總(如果沒有任何輸出的Operator,就是是sink)。 此pr代碼,不會在web ui中顯示延遲。 此外,目前還沒有確定系統時鐘同步的機制,是以如果硬體時鐘不正确,則延遲測量将不準确。

六、總結說明

1、LatencyMarker不參與window、MiniBatch的緩存計時,直接被中間Operator下發。 2、Metric路徑:TaskManagerJobMetricGroup/operator_id/operator_subtask_index/latency 3、每個中間Operator、以及Sink都會統計自己與Source節點的鍊路延遲,我們在監控頁面,一般展示Source至Sink鍊路延遲。 4、延遲粒度細分到Task,可以用來排查哪台機器的Task時延偏高,進行對比和運維排查。 5、從實作原理來看,發送時延标記間隔配置大一些(例如20秒一次),一般不會影響系統處理業務資料的性能。 來源:blog.csdn.net 作者:is_ice

如果覺得文章對你有幫助,請轉發朋友圈、點在看,讓更多人獲益,感謝您的支援!

END

關注我

flink源碼分析_Flink 全鍊路端到端延遲的測量方法

公衆号(zhisheng)裡回複 面經、ES、Flink、 Spring、Java、Kafka、監控 等關鍵字可以檢視更多關鍵字對應的文章。

Flink 實戰

1、《從0到1學習Flink》—— Apache Flink 介紹2、《從0到1學習Flink》—— Mac 上搭建 Flink 1.6.0 環境并建構運作簡單程式入門3、《從0到1學習Flink》—— Flink 配置檔案詳解4、《從0到1學習Flink》—— Data Source 介紹5、《從0到1學習Flink》—— 如何自定義 Data Source ?6、《從0到1學習Flink》—— Data Sink 介紹7、《從0到1學習Flink》—— 如何自定義 Data Sink ?8、《從0到1學習Flink》—— Flink Data transformation(轉換)9、《從0到1學習Flink》—— 介紹 Flink 中的 Stream Windows10、《從0到1學習Flink》—— Flink 中的幾種 Time 詳解11、《從0到1學習Flink》—— Flink 讀取 Kafka 資料寫入到 ElasticSearch12、《從0到1學習Flink》—— Flink 項目如何運作?13、《從0到1學習Flink》—— Flink 讀取 Kafka 資料寫入到 Kafka14、《從0到1學習Flink》—— Flink JobManager 高可用性配置15、《從0到1學習Flink》—— Flink parallelism 和 Slot 介紹16、《從0到1學習Flink》—— Flink 讀取 Kafka 資料批量寫入到 MySQL17、《從0到1學習Flink》—— Flink 讀取 Kafka 資料寫入到 RabbitMQ18、《從0到1學習Flink》—— 你上傳的 jar 包藏到哪裡去了19、大資料“重磅炸彈”——實時計算架構 Flink

20、《Flink 源碼解析》—— 源碼編譯運作

21、為什麼說流處理即未來?

22、OPPO資料中台之基石:基于Flink SQL建構實時資料倉庫

23、流計算架構 Flink 與 Storm 的性能對比

24、Flink狀态管理和容錯機制介紹

25、原了解析 | Apache Flink 結合 Kafka 建構端到端的 Exactly-Once 處理

26、Apache Flink 是如何管理好記憶體的?

27、《從0到1學習Flink》——Flink 中這樣管理配置,你知道?

28、《從0到1學習Flink》——Flink 不可以連續 Split(分流)?

29、Flink 從0到1學習—— 分享四本 Flink 的書和二十多篇 Paper 論文

30、360深度實踐:Flink與Storm協定級對比

31、Apache Flink 1.9 重大特性提前解讀

32、如何基于Flink+TensorFlow打造實時智能異常檢測平台?隻看這一篇就夠了

33、美團點評基于 Flink 的實時數倉建設實踐

34、Flink 靈魂兩百問,這誰頂得住?

35、一文搞懂 Flink 的 Exactly Once 和 At Least Once

36、你公司到底需不需要引入實時計算引擎?

37、Flink 從0到1學習 —— 如何使用 Side Output 來分流?38、一文讓你徹底了解大資料實時計算引擎 Flink39、基于 Flink 實作的商品實時推薦系統(附源碼)40、如何使用 Flink 每天實時處理百億條日志?41、Flink 在趣頭條的應用與實踐42、Flink Connector 深度解析43、滴滴實時計算發展之路及平台架構實踐44、Flink Back Pressure(背壓)是怎麼實作的?有什麼絕妙之處?45、Flink 實戰 | 貝殼找房基于Flink的實時平台建設46、如何使用 Kubernetes 部署 Flink 應用47、一文徹底搞懂 Flink 網絡流控與反壓機制48、Flink中資源管理機制解讀與展望49、Flink 實時寫入資料到 ElasticSearch 性能調優50、深入了解 Flink 容錯機制

51、吐血之作 | 流系統Spark/Flink/Kafka/DataFlow端到端一緻性實作對比

Flink 源碼解析
flink源碼分析_Flink 全鍊路端到端延遲的測量方法

知識星球裡面可以看到下面文章

flink源碼分析_Flink 全鍊路端到端延遲的測量方法