Flink怎么做到精確一次的?


使用 分布式快照機制 和 兩階段提交

兩階段提交

在 Flink 中兩階段提交的實現方法被封裝到了 TwoPhaseCommitSinkFunction 這個抽象類中,我們只需要實現其中的beginTransaction、preCommit、commit、abort 四個方法就可以實現“精確一次”的處理語義,實現的方式我們可以在官網中查到:

  • beginTransaction,在開啟事務之前,我們在目標文件系統的臨時目錄中創建一個臨時文件,后面在處理數據時將數據寫入此文件;

  • preCommit,在預提交階段,刷寫(flush)文件,然后關閉文件,之后就不能寫入到文件了,我們還將為屬於下一個檢查點的任何后續寫入啟動新事務;

  • commit,在提交階段,我們將預提交的文件原子性移動到真正的目標目錄中,請注意,這會增加輸出數據可見性的延遲;

  • abort,在中止階段,我們刪除臨時文件。


免責聲明!

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



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