文章目錄
- 檔案存儲機制
- 檔案清理政策
檔案存儲機制
1)Topic 資料的存儲機制
2)index 檔案和 log 檔案詳解
說明:日志存儲參數配置
參數 | 描述 |
---|---|
log.segment.bytes | Kafka 中 log 日志是分成一塊塊存儲的,此配置是指 log 日志劃分成塊的大小,預設值 1G。 |
log.index.interval.bytes | 預設 4kb,kafka 裡面每當寫入了 4kb 大小的日志(.log),然後就往 index 檔案裡面記錄一個索引。 稀疏索引。 |
檔案清理政策
Kafka 中預設的日志儲存時間為 7 天,可以通過調整如下參數修改儲存時間。
- log.retention.hours,最低優先級小時,預設 7 天。
- log.retention.minutes,分鐘。
- log.retention.ms,最高優先級毫秒。
-
log.retention.check.interval.ms,負責設定檢查周期,預設 5 分鐘。
那麼日志一旦超過了設定的時間,怎麼處理呢?
Kafka 中提供的日志清理政策有 delete 和 compact 兩種。
1)delete 日志删除:将過期資料删除
-
log.cleanup.policy = delete 所有資料啟用删除政策
(1)基于時間:預設打開。以 segment 中所有記錄中的最大時間戳作為該檔案時間戳。
(2)基于大小:預設關閉。超過設定的所有日志總大小,删除最早的 segment。log.retention.bytes,預設等于-1,表示無窮大。
思考:如果一個 segment 中有一部分資料過期,一部分沒有過期,怎麼處理?
答案1:看所有資料是否超過7天,超過7天就删掉。不超過7天就保留,通俗就是不求同年同月同日生,但求同年同月同日四
答案2:看日志大小,如果超過設定的所有日志總大小,則删除,每超過,則保留
2)compact 日志壓縮
壓縮後的offset可能是不連續的,比如上圖中沒有6,當從這些offset消費消息時,将會拿到比這個offset大 的offset對應的消息,實際上會拿到offset為7的消息,并從這個位置開始消費。
這種政策隻适合特殊場景,比如消息的key是使用者ID,value是使用者的資料,通過這種壓縮政策,整個消息集裡就儲存了所有使用者最新的資料。