Kafka學習筆記之Kafka日志刪出策略


0x00 概述

kafka將topic分成不同的partitions,每個partition的日志分成不同的segments,最后以segment為單位將陳舊的日志從文件系統刪除。

假設kafka的在server.properity文件中設置的日志目錄為tmp/kafka-logs,對於名為test_perf的topic。假設兩個partitions,那么我們可以在tmp/kafka-logs目錄下看到目錄VST_TOPIC-0,VST_TOPIC-1。也就是說kafka使用目錄表示topic 分區。VST_TOPIC-0目錄下下,可以看到后綴名為.log和.index的文件,如下

[root@kafka kafka-logs]# ls test_perf-0/
00000000000003417135.index.deleted 00000000000003518540.index 00000000000003619945.index
00000000000003417135.log.deleted 00000000000003518540.log 00000000000003619945.log

如果所有待刪除的陳舊日志都清理了,那么是看不到后綴名為.deleted的文件的。

 

0x01 基於時間的刪除策略

server.properity文件中設置如下:

log.retention.hours=168 //7d
log.retention.check.interval.ms=300000 //5min
log.segment.bytes=1073741824 //1G
log.cleaner.delete.retention.ms=86400000 // 1d
log.cleaner.backoff.ms=15000 //15s

每個segment的大小為1GB,每5分鍾檢查一次是否有segment已經查過了7d,如果有將其標記為deleted。標記為deleted的segment默認會保留1天,清理線程會每隔15秒檢查一次,是否有標記為deleted的segment的保留時間超過一天了,如果有將其從文件系統刪除。

大家注意,kafka清理時是不管該segment中的消息是否被消費過,它清理的依據為是否超過了指定的保留時間,僅此而已。

 

0x02 基於文件大小的刪除策略

server.properity文件中設置:

log.retention.bytes(原來寫的是log.segment.bytes)參數默認沒有指定。
你可以同時指定log.retention.bytes和log.retention.hours來混合指定保留規則。一旦日志的大小超過了log.retention.bytes就清除老的segment,一旦某個segment的保留時間超過了規定的值同樣將其清除。

 

log.cleanup.policy屬性指定清理策略,默認策略為delete,可選的為compact

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM