所謂的distributed snapshot,就是為了儲存分布式系統的state,那麼首先我們需要定義清楚什麼是分布式系統的state。考慮到上述分布式模型的定義,分布式系統state同樣是由「程序狀態」和「通道狀態」組成的。
在某乙個時刻的某分布式系統的所有程序和所有通道狀態的組合,就是這個分布式系統的全域性狀態。基於上述的雙程序雙通道的最簡分布式系統,為了描述演算法,可以設計乙個「單令牌狀態」轉換系統,兩個程序通過接收和發出令牌,會在s0、s1兩個state之間轉換,整個分布式系統則會在如下所示的4種全域性狀態(global state)之間轉換。
flink 分布式checkpointing是通過asynchronous barrier snapshots的演算法實現的,該演算法借鑑了chandy-lamport演算法的主要思想,同時做了一些改進,這些改進在**"lightweight asynchronous snapshots for distributed dataflows"中進行了詳盡的描述。
在asynchronous barrier snapshots(abs)演算法中用barrier代替了c-l演算法中的marker,針對dag的abs演算法執行流程如下所示:
當transformation operator從某個input channel收到barrier後,它會立刻block住這條通道,直到所有的operator都收到barrier,此時該operator就會記錄自身狀態,並向自己的所有output channel廣播barrier。
sink接受barrier的操作流程與transformation operator一樣。當所有的barrier都到達sink之後,並且所有的sink也完成了checkpoint,這一輪snapshot就完成了。
注意:(1)、出現乙個barrier,在該barrier之前出現的記錄都屬於該barrier對應的snapshot,在該barrier之後出現的記錄屬於下乙個snapshot。來自不同snapshot多個barrier可能同時出現在資料流中,也就是說同乙個時刻可能並發生成多個snapshot。當乙個中間(intermediate)operator接收到乙個barrier後,它會傳送barrier到屬於該barrier的snapshot的資料流中,等到sink operator接收到該barrier後會向checkpoint coordinator確認該snapshot,直到所有的sink operator都確認了該snapshot,才被認為完成了該snapshot
如下圖:
(2)、資料對齊
當operator接收到多個輸入的資料流時,需要在snapshot barrier中對資料流進行排列對齊:
① operator從乙個incoming stream接收到snapshot barrier n,然後暫停處理,直到其它的incoming stream的barrier n(否則屬於2個snapshot的記錄就混在一起了)到達該operator
② 接收到barrier n的stream被臨時擱置,來自這些stream的記錄不會被處理,而是被放在乙個buffer中。
③ 一旦最後乙個stream接收到barrier n,operator會emit所有暫存在buffer中的記錄,然後向checkpoint coordinator傳送snapshot n。
④ 繼續處理來自多個stream的記錄
(3)、在這個演算法中block input實際上是有負面效果的,一旦某個input channel發生延遲,barrier遲遲未到,這會導致transformation operator上的其它通道全部堵塞,系統吞吐大幅下降。但是這麼做的乙個最大的好處就是能夠實現exactly once。不過flink還是提供了選項,可以關閉exactly once並僅保留at least once,以提供最大限度的吞吐能力。
Flink 容錯機制
flink使用的是基於chandy lamport演算法的分布式快照 chandy lamport algorithm 有興趣的同學可以看看。檢查點配置 streamexecutionenvironment env streamexecutionenvironment.getexecutionenv...
Flink之四 容錯機制
批處理系統比較容易實現容錯機制,由於檔案可以重複訪問,當某個任務失敗後,重啟該任務即可。但是在流處理系統中,由於資料來源是無限的資料流,乙個流處理任務甚至可能會執行幾個月,將所有資料快取或是持久化,留待以後重複訪問基本上是不可行的。flink基於分布式快照與可部分重發的資料來源實現了容錯,使用者可自...
Flink狀態管理和容錯機制介紹
1.1什麼是有狀態的計算 計算任務的結果不僅僅依賴於輸入,還依賴於它的當前狀態,其實大多數的計算都是有狀態的計算。比如wordcount,給一些word,其計算它的count,這是乙個很常見的業務場景。count做為輸出,在計算的過程中要不斷的把輸入累加到count上去,那麼count就是乙個sta...