Kafka 日志消息保存時間總結
Kafka 作為一個高吞吐的消息中間件和傳統的消息中間件一個很大的不同點就在於它的日志實際上是以日志的方式默認保存在/kafka-logs文件夾中的。雖然默認有7天清楚的機制,但是在數據量大,而磁盤容量不足的情況下,經常出現無法寫入的情況。如何調整Kafka的一些默認參數就顯得比較關鍵了。這里筆者整理了一些常見的配置參數供大家參考:
分段策略屬性
屬性名 | 含義 | 默認值 |
---|---|---|
log.roll.{hours,ms} | 日志滾動的周期時間,到達指定周期時間時,強制生成一個新的segment | 168(7day) |
log.segment.bytes | 每個segment的最大容量。到達指定容量時,將強制生成一個新的segment | 1G(-1為不限制) |
log.retention.check.interval.ms | 日志片段文件檢查的周期時間 | 60000 |
日志刷新策略
Kafka的日志實際上是開始是在緩存中的,然后根據策略定期一批一批寫入到日志文件中去,以提高吞吐率。
屬性名 | 含義 | 默認值 |
---|---|---|
log.flush.interval.messages | 消息達到多少條時將數據寫入到日志文件 | 10000 |
log.flush.interval.ms | 當達到該時間時,強制執行一次flush | null |
log.flush.scheduler.interval.ms | 周期性檢查,是否需要將信息flush | 很大的值 |
日志保存清理策略
屬性名 | 含義 | 默認值 |
---|---|---|
log.cleanup.polict | 日志清理保存的策略只有delete和compact兩種 | delete |
log.retention.hours | 日志保存的時間,可以選擇hours,minutes和ms | 168(7day) |
log.retention.bytes | 刪除前日志文件允許保存的最大值 | -1 |
log.segment.delete.delay.ms | 日志文件被真正刪除前的保留時間 | 60000 |
log.cleanup.interval.mins | 每隔一段時間多久調用一次清理的步驟 | 10 |
log.retention.check.interval.ms | 周期性檢查是否有日志符合刪除的條件(新版本使用) | 300000 |
這里特別說明一下,日志的真正清楚時間。當刪除的條件滿足以后,日志將被“刪除”,但是這里的刪除其實只是將該日志進行了“delete”標注,文件只是無法被索引到了而已。但是文件本身,仍然是存在的,只有當過了log.segment.delete.delay.ms 這個時間以后,文件才會被真正的從文件系統中刪除。