分佈式消息系統:Kafka(七)日誌管理

  kafka消息是通過主題來進行組織和區分的,每個主題有分爲零個或多個分區,分區數量可以在創建時指定也可以後期修改,不過修改只能增加不能刪除,每個分區又有一個或多個副本,副本中會有一個副本被選做Leader副本,該副本對外提供讀寫操作,其他副本則是Follower。生產者發送消息到Leader副本的代理節點上,Follower副本從Leader同步數據。
  **分區的每個副本對應到一個Log對象,每個Log有劃分爲多個LogSegment,每個LogSegment包括一個日誌文件和兩個索引文件,其中兩個索引文件分別是偏移量索引文件和時間戳索引文件。**Log和LogSegment是邏輯概念,日誌文件和索引文件纔是物理存儲對象。

日誌目錄中的鎖文件
  同一時刻只能由一個日誌管理器實例或者線程來獲取該鎖文件,該文件只有在Kafka正常關閉後纔會被刪除,通過該文件可以判斷Kafka上次是否正常關閉。

  代理啓動時會啓動包括日誌管理器在內的很多管理器,日誌管理器是用來專門管理日誌的。

  • 加載配置文件中的log.dir配置項所配置的路徑,並檢查路徑是否存在,如果不存在就創建,並在這個日誌目錄下創建.lock鎖文件,該文件只有kafka被正常關閉時纔會刪除。同時創建和加載日誌檢查點文件,如果不存在就創建,該文件記錄每個主題每個分區下一次寫入磁盤數據的偏移量
  • 然後根據檢查點文件加載和恢復日誌,它會產生一個線程池來完整這個工作。它會檢查.kafka_cleanshutdown文件,當代理上一次正常關閉是纔會有這個文件,如果不存在則表示第一次啓動或者上一次沒有正常關閉。
  • 線程開始恢復日誌,在內部會爲目錄下每一個分區創建一個任務由線程池裏的線程執行。
  • 完成後刪除.kafka_cleanshutdown文件,同時關閉線程池。

日誌清理:

  Kafka提供兩種日誌清理策略,刪除和壓縮。通過參數cleanup.policy來指定清理策略。日誌清理可以控制到主題級別,可以爲不同主題創建不同的清理策略。

  • 日誌刪除,它是一個定時任務在日誌管理器啓動後會啓動它。默認爲5分鐘執行一次。kafka提供了基於日誌保留時長的刪除策略和日誌大小的策略,默認是168小時,也就是7天,日誌被保留7天之後將會刪除。默認不設置日誌大小。日誌保留時長不是通過日誌文件的最後修改時間來確定的,它是基於時間戳索引進行的。
  • 日誌壓縮
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章