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

Broker 的關機恢復機制

1、Broker關機恢復概述

  Broker關機恢復是指恢復 CommitLog、Consume Queue、Index File 等數據文件。Broker 關機分爲正常調用命令關機和異常被迫進程中止關機兩種狀況。恢復過程的設計目標是使進程正常中止的進程實現零數據丟失,異常中止的進程實現最少許的數據丟失。與關機恢復相關的主要文件有兩個:abort 和 checkpoint。apache

  abort 是一個空文件,標記當前 Broker 是否正常關機,Broker 進程正常啓動的時候,建立該文件。Broker進程正常中止後,該文件會被刪除;若是異常退出,則文件依舊存在,建立和刪除的過程以下:spa

  checkpoint 是檢查點文件,保存 Broker 最後正常存儲各類數據的時間,在重啓 Broker 時,恢復程序知道從什麼時刻恢復數據。檢查點邏輯由 org.apache.rocketmq.store.StoreCheckpoint 類實現。設計

  在 StoreCheckpoint 類中保存了 3 個時間,更新過程以下圖:3d

StoreCheckpoint 中存儲的 3 個時間參數:blog

  • 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 文件進行刷盤。進程

相關文章
相關標籤/搜索