1. 程式人生 > 其它 >Flink實時計算-- Checkpoint和Savepoint 區別與理解

Flink實時計算-- Checkpoint和Savepoint 區別與理解

1. 什麼是Savepoint和Checkpoint

Savepoint 是一項可讓我們為整個流應用程式生成”某個時間”點快照的能力。快照包含有關您輸入源的位置資訊,以及資料來源讀取到的偏移量資訊以及整個應用程式狀態資訊。

我們可以使用 Chandy-Lamport 演算法的變體在不停止應用程式的情況下獲得全部狀態的一致性快照。

儲存點包含兩個主要元素:

首先,Savepoint 包括一個包含(通常是很大的)二進位制檔案的目錄,該二進位制檔案表示在 Savepoint和Checkpoint 生成映象時流應用程式的整個狀態


一個(相對較小的)元資料檔案,包含指向所有檔案的指標(路徑),這些檔案是儲存點的一部分,並存儲在所選的分散式檔案系統或資料儲存中。

 

Checkpoint 是 Apache Flink 用於故障恢復的內部機制,包括應用程式狀態快照以及輸入源讀取到的偏移量。

如果程式發生故障,Flink 會通過從 Checkpoint 載入應用程式狀態並從恢復的讀取偏移量繼續讀取來恢復應用程式,就像什麼也沒發生一樣。

 

2.Flink Savepoints和Checkpoints的3個不同點

2.1 目標

從概念上講,Flink 的 Savepoint 和 Checkpoint 的不同之處很像傳統資料庫中備份與恢復日誌之間的區別。Checkpoint 的主要目標是充當 Flink 中的恢復機制,以確保能從潛在的故障中恢復。相反,Savepoint 的主要目標是充當手動備份之後重啟、恢復暫停作業的方法。

2.2 實現

Checkpoint 和 Savepoint 在實現上也有不同。Checkpoint 的設計輕量並快速。它們可能(但不一定必須)充分利用底層狀態後端的不同功能儘可能快速地恢復資料。基於 RocksDB 的狀態後端可以使用 RocksDB 的內部格式,而不是 Flink 的原生格式進行增量 Checkpoint。加速了 RocksDB 的 Checkpoint 過程,從而使它們成為更輕量級的檢查點機制的一個例項。相反,Savepoint 的設計重點是資料的可移植性,並支援對作業做任何更改,這些更改會使資料的生產和恢復成本更高。

2.3 生命週期

Checkpoint 是自動和定期的。它們由 Flink 自動,定期地建立和刪除,不需與使用者進行互動,以確保在作業意外失敗的情況下可以恢復。相反,Savepoint 是由使用者手動建立和管理的(即,排程、建立、刪除)。

 

3. 何時使用 Savepoint ?

儘管流處理應用程式處理的是連續產生的資料(”運動中”的資料),但在某些情況下,應用程式可能需要重新處理以前處理過的資料。Apache Flink 中的 Savepoint 允許您在以下情況下執行此操作:

部署新版本的流應用程式,包括上線新功能,修復Bug或更好的機器學習模型。
為應用程式引入 A/B 測試,使用相同的源資料流測試程式的不同版本,從相同的時間點開始測試而不用犧牲先前的狀態。
在需要更多資源的情況下重新對應用程式擴容。
將流應用程式遷移到 Flink 的新版本上,或遷移到另一個叢集。

 

參考:

Flink Savepoints和Checkpoints的3個不同點