每個日誌分段檔案對應了兩個索引檔案,主要用來提高查詢訊息的效率。
如上圖
kafka中的索引檔案屬於稀疏索引,不是所有的訊息都有對應的索引項。
每當寫入一定量(由broker端引數log.index.interval.bytes
指定,預設是4kb)的訊息時,偏移量索引檔案和時間戳索引檔案分別增加乙個偏移量索引項和時間戳索引項。
索引檔案會被對映到記憶體中,以加快索引的查詢速度。偏移量索引檔案中的偏移量是單調遞增的,查詢指定偏移量時,使用二分查詢法
來快速定位偏移量的位置,如果指定的偏移量不在索引檔案中,則會返回小於指定偏移量的最大偏移量。時間戳索引檔案中的時間戳也保持嚴格的單調遞增,查詢指定時間戳時,也根據二分查詢法來查詢不大於該時間戳的最大偏移量,至於要找到對應的物理檔案位置還需要根據偏移量索引檔案來進行再次定位。稀疏索引的方式是在磁碟空間、記憶體空間、查詢時間等多方面之間的乙個折中。
日誌分段檔案達到一定的條件時需要進行切分,那麼其對應的索引檔案也需要進行切分。日誌分段檔案切分包含以下幾個條件,滿足其一即可 :
注意:
索引檔案的大小由broker端引數log.index.size.max.bytes
配置。kafka在建立索引檔案的時候會為其預分配log.index.size.max.bytes
大小的空間,注意這一點與日誌分段檔案不同,只有當索引檔案進行切分的時候,kafka才會把該索引檔案裁剪到實際的資料大小。也就是說,與當前活躍的日誌分段對應的索引檔案的大小固定為log.index.size.max.bytes
,而其餘日誌分段對應的索引檔案的大小為實際的占用空間。
Raft 演算法詳解(二)日誌複製
在 raft 演算法中,副本資料是以日誌的形式存在的,領導者接收到來自客戶端寫請求後,處 理寫請求的過程就是乙個複製和提交日誌項的過程。那 raft 是如何複製日誌的呢?又如何實現日誌的一致的呢?這些內容是 raft 中非常核心 的內容,首先,咱 們先來理解日誌,這是你掌握如何複製日誌 實現日誌一致...
Java開發手冊之異常日誌(二) 日誌規約
強制 應用中不可直接使用日誌系統 log 4 j logback 中的 api 而應依賴使用日誌框架slf 4 j 中的 api 使用門面模式的日誌框架,有利於維護和各個類的日誌處理方式統一。import org.slf4j.logger import org.slf4j.logge ctory p...
msyql 日誌篇(二)日誌的常用配置和原理
日誌詳解之 常規日誌 慢查詢日誌 二進位制日誌 中繼日誌 出錯日誌 error log log error 這個日誌記載著伺服器啟動和關閉的情況,還記載著關於故障或異常狀況的訊息。我們安裝完資料庫之後,啟動資料庫如果發生異常,我們應該首先查這個日誌檔案。常規查詢日誌 log 該日誌包括客戶連線的記錄...