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