FLINK重點原理與機制:狀態(3)兩階段提交


假設一種場景,從Kafka Source拉取數據,經過一次窗口聚合,最后將數據發送到Kafka Sink,如下圖:
1.JobManager向Source發送Barrier,開始進入pre-Commit階段,當只有內部狀態時,pre-commit階段無需執行額外的操作,僅僅是寫入一些已定義的狀態變量即可。當chckpoint成功時Flink負責提交這些寫入,否則就終止取消掉它們。

 

 2.當Source收到Barrier后,將自身的狀態進行保存,后端可以根據配置進行選擇,這里的狀態是指消費的每個分區對應的offset。然后將Barrier發送給下一個Operator。

 

 3.當Window這個Operator收到Barrier之后,對自己的狀態進行保存,這里的狀態是指聚合的結果(sum或count的結果),然后將Barrier發送給Sink。Sink收到后也對自己的狀態進行保存,之后會進行一次預提交。

 

 4.預提交成功后,JobManager通知每個Operator,這一輪檢查點已經完成,這個時候,會進行第二次Commit。

 

 以上便是兩階段的完整流程,提交過程中如果失敗有以下幾種情況
1.Pre-commit失敗,將恢復到最近一次CheckPoint位置
2.一旦pre-commit完成,必須要確保commit也要成功
因此,所有opeartor必須對checkpoint最終結果達成共識:即所有operator都必須認定數據提交要么成功執行,要么被終止然后回滾。

 


免責聲明!

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



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