RocketMQ(4.8.0)——Broker 的關機恢復機制

左揚發表於2021-03-02

Broker 的關機恢復機制

一、Broker關機恢復概述

  Broker關機恢復是指恢復 CommitLog、Consume Queue、Index File 等資料檔案。Broker 關機分為正常呼叫命令關機和異常被迫程式停止關機兩種情況。恢復過程的設計目標是使程式正常停止的程式實現零資料丟失,異常停止的程式實現最少量的資料丟失。與關機恢復相關的主要檔案有兩個:abort 和 checkpoint。

  abort 是一個空檔案,標記當前 Broker 是否正常關機,Broker 程式正常啟動的時候,建立該檔案。Broker程式正常停止後,該檔案會被刪除;如果異常退出,則檔案依舊存在,建立和刪除的過程如下:

  checkpoint 是檢查點檔案,儲存 Broker 最後正常儲存各種資料的時間,在重啟 Broker 時,恢復程式知道從什麼時刻恢復資料。檢查點邏輯由 org.apache.rocketmq.store.StoreCheckpoint 類實現。

  在 StoreCheckpoint 類中儲存了 3 個時間,更新過程如下圖:

StoreCheckpoint 中儲存的 3 個時間引數:

  • physicMsgTimestamp:最後一條已儲存 CommitLog 的訊息的儲存時間。
  • logicsMsgTimestamp:最後一條已儲存 Consume Queue 的訊息的儲存時間。
  • indexMsgTimestamp:最後一條已儲存 Index File 的訊息的儲存時間。

  physicMsgTimestamp 和 logicsMsgTimestamp 的更新都是在資料儲存成功後進行的,過程比較簡單。而 indexMsgTimestamp 的邏輯是在 Index File 刷盤時被更新的,Index File 刷盤方法 org.apache.rocketmq.store.index.IndexService.flush()。在Index File 刷盤後,已刷盤檔案的最後儲存訊息時間被賦值給 indexMsgTimestamp,並對 Checkpoint 檔案進行刷盤。

 

相關文章