Flink Checkpoint

在學習flink的時候看了本書《Stream Processing with Apache Flink》宪睹。里面對Flink checkpoint的原理講得挺清楚的愁茁,后面內部分享時也參考了這個說法,所以這里按照我的理解描述一下亭病。

首先鹅很,flink的checkpoint并不是將Subtask或者UDF對象進行序列化,然后保存罪帖。他們確實實現(xiàn)了Serializable接口促煮,但是是為了要在Client,JobManager和TaskManager之間傳輸Graph整袁。最終被checkpoint保存的每個subtask的狀態(tài)只有raw state和managed state兩種菠齿。raw state是用戶自己進行序列化,而managed state是在operator生命周期初始化時就被注冊到backend storage對象中了坐昙,在進行checkpoint時绳匀,會直接拿到注冊的state進行保存(中間會調用回調函數(shù),在UDF中對state進行賦值)炸客。所以checkpoint的state不是很大的數(shù)據(jù)疾棵。

其次,checkpoint要保存的每個subtask的state并不是自然時刻下痹仙,他們的state是尔。如下圖所示,并不是要將Source1的3开仰,Source2的4拟枚,Task1的2薪铜,Task2的3保存下來。如果要這樣保存的話梨州,那么on-the-fly的數(shù)據(jù)也要保存痕囱,否則無法從checkpoint中還原這個瞬間。checkpoint真正要保存的時刻是指的flink processing time或者event time概念下的瞬間暴匠。很顯然鞍恢,圖中的這個瞬間至少Source和Task是不在一個“時刻”的,因為Source1的“時間”顯然晚于Task1的“時間”每窖。

flink-checkpoint-01

Easy Understand

在理想情況下帮掉,checkpoint主要是完成一下這幾個動作:

  1. 暫停新數(shù)據(jù)的輸入
  2. 等待流中on-the-fly的數(shù)據(jù)被處理干凈,此時得到flink graph的一個snapshot
  3. 將所有Task中的State拷貝到State Backend中窒典,如HDFS蟆炊。此動作由各個Task Manager完成
  4. 各個Task Manager將Task State的位置上報給Job Manager,完成checkpoint
  5. 恢復數(shù)據(jù)的輸入

如上所述瀑志,這里才需要“暫停輸入+排干on-the-fly數(shù)據(jù)”的操作涩搓,這樣才能拿到同一時刻下所有subtask的state。這又必然引入了STW的副作用劈猪。

Chandy-Lamport algorithm

于是有了Chandy-Lamport算法昧甘。他解決的問題,就是在不停止流處理的前提下拿到每個subtask在某一瞬間的snapshot战得,從而完成checkpoint充边。

  1. 在checkpoint觸發(fā)時刻,Job Manager會往所有Source的流中放入一個barrier(圖中三角形)常侦。barrier包含當前checkpoint的ID
flink-checkpoint-02
  1. 當barrier經過一個subtask時浇冰,即表示當前這個subtask處于checkpoint觸發(fā)的“時刻”,他就會立即將barrier法往下游聋亡,并執(zhí)行checkpoint方法將當前的state存入backend storage肘习。圖中Source1和Source2就是完成了checkpoint動作。
flink-checkpoint-03
  1. 如果一個subtask有多個上游節(jié)點坡倔,這個subtask就需要等待所有上游發(fā)來的barrier都接收到漂佩,才能表示這個subtask到達了checkpoint觸發(fā)“時刻”。但所有節(jié)點的barrier不一定一起到達致讥,這時候就會面臨“是否要對齊barrier”的問題(Barrier Alignment)仅仆。如圖中的Task1.1器赞,他有2個上游節(jié)點垢袱,Source1和Source2。假設Source1的barrier先到港柜,這時候Task1.1就有2個選擇:
    • 是馬上把這個barrier發(fā)往下游并等待Source2的barrier來了再做checkpoint
    • 還是把Source1這邊后續(xù)的event全都cache起來请契,等Source2的barrier來了咳榜,在做checkpoint,完了再繼續(xù)處理Source1和Source2的event爽锥,當前Source1這邊需要先處理cache里的event涌韩。

這引入了另一個概念:Result guarantees。

Result Guarantees

Flink提供了幾種容錯機制:

  • At-Most-Once
  • At-Least-Once
  • Exactly-Once
  • End-to-end Exactly-Once

當不采用checkpoint時氯夷,每個event做多就只會被處理一次臣樱,這就是At-Most-Once

當不開啟Barrier對齊時腮考,上圖中的Source1來的在barrier后面的一些event有可能比Source2的barrier要先到Task1.1雇毫,因為我們沒有cache這些event,所以他們會正常被處理并有可能更新Task1.1的state踩蔚。這樣棚放,在回復checkpoint后,Task1.1的state可能就是處理了某些checkpoint“時刻”之后數(shù)據(jù)的狀態(tài)馅闽。但是對于Source1來說飘蚯,他還是會offset到正常的checkpoint“時刻”的位置,那么之前處理過的barrier后面的event可能還是會被再次放入這個流中福也。那么這些event就不能保證“只處理一次”了局骤,有可能處理多次,這就是At-Least-once拟杉。

如果在Task1.1.處庄涡,先來的barrier后面的event都被cache了,那么就不會影響到這個task的state搬设。那么Task1.1的checkpoint的state就能準確反映checkpoint“時刻”的情況穴店。那么checkpoint回復后也不會有前面說的問題,這就是Exactly-Once拿穴。但是因為Exactly-Once引入了cache機制泣洞,這會給checkpoint動作帶來額外的時延(latency)

End-to-end Exactly-Once需要結合外部系統(tǒng)一起完成默色,這里就不做討論了球凰。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腿宰,隨后出現(xiàn)的幾起案子呕诉,更是在濱河造成了極大的恐慌,老刑警劉巖吃度,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甩挫,死亡現(xiàn)場離奇詭異,居然都是意外死亡椿每,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來务唐,“玉大人,你說我怎么就攤上這事挖诸。” “怎么了法精?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵多律,是天一觀的道長。 經常有香客問我搂蜓,道長菱涤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任洛勉,我火速辦了婚禮粘秆,結果婚禮上,老公的妹妹穿的比我還像新娘收毫。我一直安慰自己攻走,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布此再。 她就那樣靜靜地躺著昔搂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪输拇。 梳的紋絲不亂的頭發(fā)上摘符,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音策吠,去河邊找鬼逛裤。 笑死,一個胖子當著我的面吹牛猴抹,可吹牛的內容都是我干的带族。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蟀给,長吁一口氣:“原來是場噩夢啊……” “哼蝙砌!你這毒婦竟也來了?” 一聲冷哼從身側響起跋理,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤择克,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后前普,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肚邢,經...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年汁政,在試婚紗的時候發(fā)現(xiàn)自己被綠了道偷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡记劈,死狀恐怖勺鸦,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情目木,我是刑警寧澤换途,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站刽射,受9級特大地震影響军拟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜誓禁,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一懈息、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摹恰,春花似錦辫继、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闺阱,卻和暖如春炮车,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酣溃。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工瘦穆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赊豌。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓难审,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亿絮。 傳聞我的和親對象是個殘疾皇子告喊,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容