前言
在Kafka中,我們可能會發現兩個與retention相關的配置:
- log.retention.minutes
- offsets.retention.minutes
那么它們之前的差別是什么呢?
定義
首先讓我們看看它們在官方文檔中的定義
名稱 | 描述 | 類型 | 默認值 | 有效值 | 重要性 |
---|---|---|---|---|---|
log.retention.minutes | The number of minutes to keep a log file before deleting it (in minutes), secondary to log.retention.ms property. If not set, the value in log.retention.hours is used 在刪除日志文件之前保留日志文件的分鍾數(以分鍾為單位),優先級弱於 log.retention.ms。 如果未設置,則使用log.retention.hours中的值 |
int | null | 高 | |
offsets.retention.minutes | Log retention window in minutes for offsets topic 主題偏移量日志文的保留時長(分鍾) |
int | 1440 | [1,...] | 高 |
兩者的差別
log.retention.minutes設定的是消息日志的保留時長,而offsets.retention.minutes則是記錄topic的偏移量日志的保留時長。
偏移量是指向消費者已消耗的最新消息的指針。 比如,你消費了10條消息,那么偏移量將移動10個位置。 這個偏移量會被記錄到日志中,以便我們下次消費時知道應該從哪個offset開始繼續消費。
而offsets.retention.minutes允許我們將偏移量重置,即它會清除過期的記錄主題偏移量的日志,一旦記錄主題偏移量的日志被清楚,我們將不知道之前消費到具體哪個offset。這個設置並不會影響消息日志的保留時間。
比如我們將offsets.retention.minutes設為10,即十分鍾。然后最后一次主題A的消費偏移量是100,但是十分鍾內我們沒有繼續消費,該記錄主題A的消費偏移量100的日志將會被清除,也就是下次繼續消費主題A的消息時,我們不知道上一次消費哪里了(注意,主題A所存儲的消息依舊在broker上,並沒有被刪除), 在這種情況下,將會根據auto.offset.reset 的設置,讀取最早(smallest)/最晚(largest)的消息。
一般來說,記錄topic的偏移量日志的保留時長需要設置的比消息日志的保留時長更大。