Exactly-once語義
Flink自1.4.0開始實現exactly-once的數據保證,即在任何情況下都能保證數據對應用產生的效果只有一次,不會多也不會少。具體實現依賴於抽象類TwoPhaseCommitSinkFunction,用戶只需要實現類介面就可以自己定義對外部系統的exactly-once。
Flink的checkpoint可以保證作業失敗的情況下從最近一次快照進行恢復,也就是可以保證系統內部的exactly-once。但是,flink有很多外接系統,比如將數據寫到kafka,一旦作業失敗重啟,offset重置,會消費舊數據,從而將重複的結果寫到kafka。如下圖: