Flink檢查點(checkpoint)、保存點(savepoint)的區(qū)別與聯(lián)系

今天聽同事做關(guān)于Docker的技術(shù)分享,結(jié)束時已經(jīng)有點晚了,沒法仔細(xì)選題,所以就寫一個所有人都知道的小知識點吧。

checkpoint(檢查點)和savepoint(保存點)是Flink為我們提供的兩種作業(yè)快照機制,它們都包含有作業(yè)狀態(tài)的持久化副本。官方文檔這樣描述checkpoint:

Checkpoints make state in Flink fault tolerant by allowing state and the corresponding stream positions to be recovered, thereby giving the application the same semantics as a failure-free execution.

而對savepoint的描述是:

A Savepoint is a consistent image of the execution state of a streaming job, created via Flink’s checkpointing mechanism. You can use Savepoints to stop-and-resume, fork, or update your Flink jobs.

下面這張來自Flink 1.1版本文檔的圖(更新的版本這張圖就不見了)示出了checkpoint和savepoint的關(guān)系。

下面用幾句話總結(jié)一下。

  1. checkpoint的側(cè)重點是“容錯”,即Flink作業(yè)意外失敗并重啟之后,能夠直接從早先打下的checkpoint恢復(fù)運行,且不影響作業(yè)邏輯的準(zhǔn)確性。而savepoint的側(cè)重點是“維護”,即Flink作業(yè)需要在人工干預(yù)下手動重啟、升級、遷移或A/B測試時,先將狀態(tài)整體寫入可靠存儲,維護完畢之后再從savepoint恢復(fù)現(xiàn)場。

  2. savepoint是“通過checkpoint機制”創(chuàng)建的,所以savepoint本質(zhì)上是特殊的checkpoint。

  3. checkpoint面向Flink Runtime本身,由Flink的各個TaskManager定時觸發(fā)快照并自動清理,一般不需要用戶干預(yù);savepoint面向用戶,完全根據(jù)用戶的需要觸發(fā)與清理。

  4. checkpoint的頻率往往比較高(因為需要盡可能保證作業(yè)恢復(fù)的準(zhǔn)確度),所以checkpoint的存儲格式非常輕量級,但作為trade-off犧牲了一切可移植(portable)的東西,比如不保證改變并行度和升級的兼容性。savepoint則以二進制形式存儲所有狀態(tài)數(shù)據(jù)和元數(shù)據(jù),執(zhí)行起來比較慢而且“貴”,但是能夠保證portability,如并行度改變或代碼升級之后,仍然能正?;謴?fù)。

  5. checkpoint是支持增量的(通過RocksDB狀態(tài)后端),特別是對于超大狀態(tài)的作業(yè)而言可以降低寫入成本。savepoint并不會連續(xù)自動觸發(fā),所以savepoint沒有必要支持增量。

民那晚安晚安。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容