kafka大講座:https://www.cnblogs.com/zackstang/category/1520711.html
參考鏈接:https://www.cnblogs.com/zackstang/p/11638127.html
https://blog.csdn.net/m0_45097637/article/details/123674946
kafka將topic分成不同的partitions,每個partition的日志分成不同的segments,最后以segment為單位將陳舊的日志從文件系統(tǒng)刪除。
root@master:/public/nfs#? ?du -d 1 -m . -hl
du -d 1 -m . -hl


Kafka過期數(shù)據(jù)清理策略
log.retention.hours=24 //1d
log.retention.check.interval.ms=300000 //5min
log.segment.bytes=1073741824 //1G
log.cleaner.enable=true
log.cleaner.delete.retention.ms=86400000 // 1d
log.cleaner.backoff.ms=15000 //15s
log.cleanup.policy=delete
??在Kafka中,過期數(shù)據(jù)的清理是通過兩個參數(shù)控制的:log.retention.ms和log.retention.bytes。
??log.retention.ms:指定一個日志分段(log segment)最長保留的時間。 默認情況下,這個值是7天。在這個時間之前創(chuàng)建的所有分段都不會被刪除,而在這個時間之后創(chuàng)建的分段,如果不再被引用,就會被刪除??梢酝ㄟ^修改這個參數(shù)的值來控制過期數(shù)據(jù)的清理。
??log.retention.bytes:指定日志分段的最大大小。 當一個日志分段的大小超過了這個值,且它不再被引用,就會被刪除。這個參數(shù)的默認值是-1,表示不啟用大小限制。
??在Kafka中,每個分區(qū)都有一個獨立的日志文件(log file),日志文件中包含多個日志分段。每個日志分段包含了一段時間內的數(shù)據(jù),或者說一定數(shù)量的消息。當一個日志分段被創(chuàng)建時,它會被添加到日志文件中,然后寫入的消息會被追加到這個分段中。在日志分段中的消息被消費完畢之后,這個分段就不再被使用了,如果它已經過期或者超過了最大大小,就會被刪除。
??需要注意的是,如果使用Kafka的日志清理功能,那么數(shù)據(jù)的刪除不是立即生效的,而是由一個后臺線程定期執(zhí)行清理操作。這個后臺線程默認情況下每隔5分鐘執(zhí)行一次清理操作,可以通過log.cleaner.backoff.ms參數(shù)修改清理間隔的時間。另外,日志清理操作并不是實時的,它會在一個時間窗口內處理多個日志分段,因此在清理周期內,一些分段可能會被保留下來,即使它們已經過期或者超過了大小限制。
??日志清理的策略只有delete和compact兩種
log.cleanup.policy = delete啟用刪除策略
log.cleanup.policy = compact啟用壓縮策略
Log Cleanup?策略
在Kafka中,存在數(shù)據(jù)過期的機制,稱為data expire。如何處理過期數(shù)據(jù)是根據(jù)指定的policy(策略)決定的,而處理過期數(shù)據(jù)的行為,即為log cleanup。
在Kafka中有以下幾種處理過期數(shù)據(jù)的策略:
?log.cleanup.policy=delete(Kafka中所有用戶創(chuàng)建的topics,默認均為此策略)
根據(jù)數(shù)據(jù)已保存的時間,進行刪除(默認為1周)
?根據(jù)log的max size,進行刪除(默認為-1,也就是無限制)
?log.cleanup.policy=compact(topic __consumer_offsets?默認為此策略)
?根據(jù)messages中的key,進行刪除操作
?在active segment?被commit?后,會刪除掉old duplicate keys
無限制的時間與空間的日志保留
log.cleanup.policy=delete
log.cleanup.policy=delete?的策略,根據(jù)數(shù)據(jù)保留的時間、以及l(fā)og的max size,對數(shù)據(jù)進行cleanup??刂茢?shù)據(jù)保留時間以及l(fā)og max size的參數(shù)分別為:
?log.retention.hours:指定數(shù)據(jù)保留的時常(默認為一周,168)
o?將參數(shù)調整到更高的值,也就意味著會占據(jù)更多的磁盤空間
o?更小值意味著保存的數(shù)據(jù)量會更少(假如consumer?宕機超過一周,則數(shù)據(jù)便會再未處理前即丟失)
?log.retention.bytes:每個partition中保存的最大數(shù)據(jù)量大?。J為-1,也就是無限大)
o?再控制log的大小不超過一個閾值時,會比較有用
自動清理Kafka中的數(shù)據(jù)可以控制磁盤上數(shù)據(jù)的大小、刪除不需要的數(shù)據(jù),同時也減少了對Kafka集群的維護成本。
那Log cleanup?在什么時候發(fā)生呢?
·?首先值得注意的是:log cleanup?在partition segment?上發(fā)生
·?更小/更多的segment,也就意味著log cleanup?發(fā)生的頻率會上升
·?Log cleanup?不應該頻繁發(fā)生=>?因為它會消耗CPU與內存資源
·?Cleaner的檢查會在每15秒進行一次,由log.cleaner.backoff.ms?控制
log.cleaner.backoff.ms? 清理檢查時間配置

