Flink內部精確一次exactly once

2021-10-14 17:29:36 字數 785 閱讀 3926

flink 中的乙個大的特性就是exactly-once的特性,我們在一般的流處理程式中,會有三種處理語義

我們在程式處理中,通常要求程式滿足exactly-once,就是確保資料的準確性,不丟失,不重複,但是實現這樣的功能是比較複雜的,在flink中,是如何提供精確一次的特性呢?

我覺得應該有兩方面的因素,乙個是flink的checkpoint特性,另外乙個是兩階段提交,這兩方面的組合,讓flink有了精確一次的能力。

flink的checkpoint機制是把程式處理的中間狀態儲存下來,當程式失敗可以從最新的checkpoint中恢復,通過checkpoint的機制,flink可以實現精確一次和至少一次的語義。

barrier對齊發生在乙個處理節點需要接收上游不同處理節點的資料,由於不同的上游節點資料處理速度不一致,那麼就會導致下游節點接收到 barrier的時間點也會不一致,這時候就需要使用barrier對齊機制:在同一checkpoint中,先到達的barrier是否需要等待其他處理節點barrier達到後在傳送後續資料,barrier將資料流分為前後兩個checkpoint(chk n,chk n+1)的概念,如果不等待那麼就會導致chk n的階段處理了chk n+1階段的資料,但是在source端所記錄的消費偏移量又一致,如果chk n成功之後,後續的任務處理失敗,任務重啟會消費chk n+1階段資料,就會到致資料重複訊息,如果barrier等待就不會出現這樣情況,因此barrier需要對齊那麼就是實現exectly once語義,否則實現的是at least once語義。由於狀態是屬於flink內部儲存,所以flink 僅僅滿足內部exectly once語義。

Kafka之精確一次處理語義

訊息處理語義 producer consumer 案例 test public void testidempotence else if recordmetadata null producer.close 實現原理 kafka以上的設計確保了即使出現重試操作,每條訊息也僅僅在日誌中儲存一次。不過由...

記一次Flink消費kafka資料恢復機制

現在我有乙個資料架構 flink消費kafka,開啟windows視窗聚合存es。某天的晚上flink掛機,未加報警機制,3小時後才發現。如何才能把丟失的kafka資料補充回來?1 setstartfromlatest 從最後乙個kafka offset開始消費 2 setstartfromgrou...

SQL第一次內部培訓 gosun

sql第一次內部培訓 sql建表 實體 s sno學號 sname姓名 sd系 sage年齡 性別 學生 t tno教師工號,tname教師名 age年齡 性別 教師 c cno課程號,cname課程名 pcno先修課程號,tno教師工號 課程 sc sno學號 cno課程號 grade得分 學生選...