Flink可靠性的基石-checkpoint機(jī)制詳細(xì)解析
Flink
在 Flink 中需要端到端精準(zhǔn)一次處理的位置有三個(gè):
Flink 端到端精準(zhǔn)一次處理
Source 端:數(shù)據(jù)從上一階段進(jìn)入到 Flink 時(shí),需要保證消息精準(zhǔn)一次消費(fèi)。
Flink 內(nèi)部端:這個(gè)我們已經(jīng)了解,利用 Checkpoint 機(jī)制,把狀態(tài)存盤,發(fā)生故障的時(shí)候可以恢復(fù),保證內(nèi)部的狀態(tài)一致性。不了解的小伙伴可以看下我之前的文章:
Flink可靠性的基石-checkpoint機(jī)制詳細(xì)解析
Sink 端:將處理完的數(shù)據(jù)發(fā)送到下一階段時(shí),需要保證數(shù)據(jù)能夠準(zhǔn)確無誤發(fā)送到下一階段。
在 Flink 1.4 版本之前,精準(zhǔn)一次處理只限于 Flink 應(yīng)用內(nèi),也就是所有的 Operator 完全由 Flink 狀態(tài)保存并管理的才能實(shí)現(xiàn)精確一次處理。但 Flink 處理完數(shù)據(jù)后大多需要將結(jié)果發(fā)送到外部系統(tǒng),比如 Sink 到 Kafka 中,這個(gè)過程中 Flink 并不保證精準(zhǔn)一次處理。
在 Flink 1.4 版本正式引入了一個(gè)里程碑式的功能:兩階段提交 Sink,即 TwoPhaseCommitSinkFunction 函數(shù)。該 SinkFunction 提取并封裝了兩階段提交協(xié)議中的公共邏輯,自此 Flink 搭配特定 Source 和 Sink(如 Kafka 0.11 版)實(shí)現(xiàn)精確一次處理語(yǔ)義(英文簡(jiǎn)稱:EOS,即 Exactly-Once Semantics)。
Flink端到端精準(zhǔn)一次處理語(yǔ)義(EOS)
注:以下內(nèi)容適用于 Flink 1.4 及之后版本
對(duì)于 Source 端:Source 端的精準(zhǔn)一次處理比較簡(jiǎn)單,畢竟數(shù)據(jù)是落到 Flink 中,所以 Flink 只需要保存消費(fèi)數(shù)據(jù)的偏移量即可, 如消費(fèi) Kafka 中的數(shù)據(jù),F(xiàn)link 將 Kafka Consumer 作為 Source,可以將偏移量保存下來,如果后續(xù)任務(wù)出現(xiàn)了故障,恢復(fù)的時(shí)候可以由連接器重置偏移量,重新消費(fèi)數(shù)據(jù),保證一致性。
對(duì)于 Sink 端:Sink 端是最復(fù)雜的,因?yàn)閿?shù)據(jù)是落地到其他系統(tǒng)上的,數(shù)據(jù)一旦離開 Flink 之后,F(xiàn)link 就監(jiān)控不到這些數(shù)據(jù)了,所以精準(zhǔn)一次處理語(yǔ)義必須也要應(yīng)用于 Flink 寫入數(shù)據(jù)的外部系統(tǒng),故這些外部系統(tǒng)必須提供一種手段允許提交或回滾這些寫入操作,同時(shí)還要保證與 Flink Checkpoint 能夠協(xié)調(diào)使用(Kafka 0.11 版本已經(jīng)實(shí)現(xiàn)精確一次處理語(yǔ)義)。
我們以 Flink 與 Kafka 組合為例,F(xiàn)link 從 Kafka 中讀數(shù)據(jù),處理完的數(shù)據(jù)在寫入 Kafka 中。
為什么以Kafka為例,第一個(gè)原因是目前大多數(shù)的 Flink 系統(tǒng)讀寫數(shù)據(jù)都是與 Kafka 系統(tǒng)進(jìn)行的。第二個(gè)原因,也是最重要的原因 Kafka 0.11 版本正式發(fā)布了對(duì)于事務(wù)的支持,這是與Kafka交互的Flink應(yīng)用要實(shí)現(xiàn)端到端精準(zhǔn)一次語(yǔ)義的必要條件。
當(dāng)然,F(xiàn)link 支持這種精準(zhǔn)一次處理語(yǔ)義并不只是限于與 Kafka 的結(jié)合,可以使用任何 Source/Sink,只要它們提供了必要的協(xié)調(diào)機(jī)制。
Flink 與 Kafka 組合
Flink 應(yīng)用示例
如上圖所示,F(xiàn)link 中包含以下組件:
一個(gè) Source,從 Kafka 中讀取數(shù)據(jù)(即 KafkaConsumer)
一個(gè)時(shí)間窗口化的聚會(huì)操作(Window)
一個(gè) Sink,將結(jié)果寫入到 Kafka(即 KafkaProducer)
若要 Sink 支持精準(zhǔn)一次處理語(yǔ)義(EOS),它必須以事務(wù)的方式寫數(shù)據(jù)到 Kafka,這樣當(dāng)提交事務(wù)時(shí)兩次 Checkpoint 間的所有寫入操作當(dāng)作為一個(gè)事務(wù)被提交。這確保了出現(xiàn)故障或崩潰時(shí)這些寫入操作能夠被回滾。
當(dāng)然了,在一個(gè)分布式且含有多個(gè)并發(fā)執(zhí)行 Sink 的應(yīng)用中,僅僅執(zhí)行單次提交或回滾是不夠的,因?yàn)樗薪M件都必須對(duì)這些提交或回滾達(dá)成共識(shí),這樣才能保證得到一個(gè)一致性的結(jié)果。Flink 使用兩階段提交協(xié)議以及預(yù)提交(Pre-commit)階段來解決這個(gè)問題。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身智能機(jī)器人產(chǎn)業(yè)技術(shù)創(chuàng)新應(yīng)用論壇
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
8月5日立即報(bào)名>> 【在線會(huì)議】CAE優(yōu)化設(shè)計(jì):醫(yī)療器械設(shè)計(jì)的應(yīng)用案例與方案解析
推薦專題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
- 3 一文看懂視覺語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 4 “支付+”時(shí)代,支付即生態(tài) | 2025中國(guó)跨境支付十大趨勢(shì)
- 5 中國(guó)最具實(shí)力AI公司TOP10
- 6 深圳跑出40億超級(jí)隱形冠軍:賣機(jī)器人年入6.1億,港股上市
- 7 特斯拉Robotaxi上路,馬斯克端上畫了十年的餅
- 8 “AI六小虎”到了下一個(gè)賽點(diǎn)
- 9 張勇等人退出阿里合伙人
- 10 AI視頻,攪動(dòng)1.5萬(wàn)億市場(chǎng)