Apache Flink中保存點和檢查點之間的3個區別

我們的Flink Friday Tip的這一集解釋了Savepoints和Checkpoints是什麼,並檢查了它們在Apache Flink中的主要區別。在以下段落中,我們將解釋Savepoints的用途,何時使用它們,並對它們與檢查點的不同之處進行並排比較。

Apache Flink中的保存點和檢查點是什麼?

Apache Flink Savepoint是一項功能,允許您拍攝整個流應用程序的“時間點”快照。此快照包含有關輸入位置的信息,以及有關源的所有位置和整個應用程序狀態的信息。我們可以獲得整個狀態的一致快照,而無需使用Chandy-Lamport算法的變體來停止應用程序。保存點包含兩個主要元素:

  1. 首先,Savepoints包括一個目錄,其中包含(通常很大的)二進制文件,這些文件表示Checkpoint / Savepoint映像點處的流應用程序的整個狀態。
  2. 一個(相對較小的)元數據文件,包含指向Savepoint一部分的所有文件的指針(路徑),並存儲在所選的分佈式文件系統或數據存儲中。

閱讀我們之前的博客文章,瞭解如何在流應用程序中啟用Savepoints的分步指南。


關於Savepoints的所有上述內容對於我們在之前的帖子中解釋Apache Flink中的檢查點非常熟悉 。檢查點是Apache Flink從故障中恢復的內部機制,包括應用程序狀態的副本,包括輸入的讀取位置。如果發生故障,Flink將通過從檢查點加載應用程序狀態並從恢復的讀取位置繼續恢復應用程序,就像沒有發生任何事情一樣。


閱讀我們之前的Flink Friday Tips,瞭解Apache Flink如何管理Kafka Consumer補償的分步示例。


Apache Flink中保存點和檢查點之間的3個區別


Apache Flink中保存點和檢查點之間的3個區別

檢查點和保存點是Apache Flink作為流處理框架非常獨特的兩個特性。保存點和檢查點在實現中可能看起來相似,但是,這兩個功能在以下3種方式上有所不同:

  1. 目標:從概念上講,Flink的保存點與檢查點的不同之處在於備份與傳統數據庫系統中的恢復日誌不同。檢查點的主要目標是充當Apache Flink中的恢復機制,確保容錯處理框架可以從潛在的作業失敗中恢復。相反,Savepoints的主要目標是在手動備份和用戶恢復活動後充當重啟,繼續或重新打開暫停的應用程序的方法。
  2. 實施:檢查點和保存點的實施方式不同。檢查點設計輕巧,快速。他們可能(但不一定必須)利用底層狀態後端的不同功能並儘可能快地恢復數據。例如,使用RocksDB狀態後端的增量檢查點使用RocksDB的內部格式而不是Flink的本機格式。這用於加速RocksDB的檢查點過程,使它們成為更輕量級的Checkpointing機制的第一個實例。相反,Savepoints旨在更多地關注數據的可移植性,並支持對作業所做的任何更改,這使得生成和恢復的成本略高。
  3. 生命週期:檢查點是自動和定期的。它們由Flink自動定期擁有,創建和刪除,無需任何用戶交互,以確保在意外作業失敗的情況下完全恢復。相反,用戶手動擁有和管理保存點(即,它們被安排,創建和刪除)。
Apache Flink中保存點和檢查點之間的3個區別

何時在流媒體應用程序中使用Savepoints?

儘管流處理應用程序處理連續生成的數據(數據“運動中”),但是存在應用程序可能需要重新處理先前已處理的數據的情況。Apache Flink中的保存點允許您在以下情況下執行此操作:

  • 部署流應用程序的更新版本,包括新功能,錯誤修復或更好的機器學習模型
  • 為您的應用程序引入A / B測試,使用相同的源數據流測試程序的不同版本,從同一時間點開始測試而不犧牲先前的狀態
  • 在需要更多資源的情況下重新調整應用程序
  • 將流式應用程序遷移到Apache Flink的新版本,或將應用程序升級到其他群集。

結論

檢查點和保存點是Apache Flink中的兩個不同功能,它們滿足不同的需求,以確保一致性,容錯性,並確保在意外的作業失敗(使用檢查點)以及升級的情況下保持應用程序狀態,bug修復,遷移或A / B測試(使用Savepoints)。這兩個功能相結合,可以在不同的實例中涵蓋,確保應用程序的狀態在不同的場景和環境中保持不變。



分享到:


相關文章: