1. 程式人生 > >Kafka(四)Kafka日誌管理

Kafka(四)Kafka日誌管理

alt 以及 二分 目錄 管理 包括 同步數據 代理 oss

kafka消息是通過主題來進行組織和區分的,每個主題有分為零個或多個分區,分區數量可以在創建時指定也可以後期修改,不過修改只能增加不能刪除,每個分區又有一個或多個副本,副本中會有一個副本被選做Leader副本,該副本對外提供讀寫操作,其他副本則是Follower。生產者發送消息到Leader副本的代理節點上,Follower副本從Leader同步數據。


分區的每個副本對應到一個Log對象,每個Log有劃分為多個LogSegment,每個LogSegment包括一個日誌文件和兩個索引文件,其中兩個索引文件分別是偏移量索引文件和時間戳索引文件。Log和LogSegment是邏輯概念,日誌文件和索引文件才是物理存儲對象,下圖為主題BBB三個分區的日誌文件目錄,每個分區對應一個目錄。

技術分享圖片

下圖為BBB主題0分區的日誌文件(.log)和偏移量文件(.index)以及時間戳文件(.timeindex)。日誌文件默認單個日誌文件大小為1GB,可以通過修改配置文件來指定大小。Kafka提供日誌切割機制,要麽達到日誌文件大小,如果沒有達到大小閾值,但是達到了log.roll.ms或者log.roll.hours設置的值也會進行切割創建新的日誌文件。

技術分享圖片

數據文件名稱是一堆0,其實這就是數據文件的命名規則,它是由第一條消息的偏移量值然後左補0構成20位長度來形成的。

Kafka會把每個日誌段的基準偏移量保存到ConcurrentSkipListMap集合中,通過二分法可以快速定位到消息所在的數據文件和索引文件,然後在索引文件中通過二分法,查找最小值等於指定偏移量的最大偏移量,最後從查找的最大偏移量出開始掃描數據文件,直到查詢到偏移量與指定偏移量相等的消息。


日誌目錄中的鎖文件

技術分享圖片

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


Kafka(四)Kafka日誌管理