您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Flink Exactly-Once 投遞的實現淺析是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
進程狀態需要持續化到可靠的分布式存儲,以防止節點丟失帶來狀態的丟失。
由于發送消息是一個兩階段的操作(即發送消息和收到對方的確認),重啟之后的進程沒有辦法判斷崩潰前是否已經使用當前序列號發送過消息,因此可能會導致重復使用序列號的問題。
被認為崩潰的進程有可能并沒有退出,隨后再次連上來變為 zombie 進程繼續發送數據。
TwoPhaseCommitSinkFunction
接口,從命名即可看出這是對兩階段提交協議的一個實現,其主要方法如下:beginTransaction: 初始化一個事務。在有新數據到達并且當前事務為空時調用。
preCommit: 預提交數據,即不再寫入當前事務并準好提交當前事務。在 sink 算子進行快照的時候調用。
commit: 正式提交數據,將準備好的事務提交。在作業的 checkpoint 完成時調用。
abort: 放棄事務。在作業 checkpoint 失敗的時候調用。
在 sink 端緩存未 commit 數據,等 checkpoint 完成以后將緩存的數據 flush 到下游。這種方式可以提供 read-committed 的事務隔離級別,但同時由于未 commit 的數據不會發往下游(與 checkpoint 同步),sink 端緩存會帶來一定的延遲,相當于退化為與 checkpoint 同步的 micro-batching 模式。
在下游系統緩存未 commit 數據,等 checkpoint 完成后通知下游 commit。這樣的好處是數據是流式發往下游的,不會在每次 checkpoint 完成后出現網絡 IO 的高峰,并且事務隔離級別可以由下游設置,下游可以選擇低延遲弱一致性的 read-uncommitted 或高延遲強一致性的 read-committed。
上述就是小編為大家分享的Flink Exactly-Once 投遞的實現淺析是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。