Kafka日志清理實(shí)現(xiàn)詳細(xì)過(guò)程講解
Kafka日志清理目前主要有兩種策略:
- 日志刪除
- 日志壓縮:日志壓縮就是根據(jù)key來(lái)保留最后一條消息。
Kafka提供log.cleanup.policy參數(shù)進(jìn)行相應(yīng)配置,默認(rèn)值:delete,還可以選擇compact。
日志刪除
配置 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|
log.retention.check.interval.ms | 300000 (5分鐘) | 檢測(cè)頻率 |
log.retention.hours | 168 (7天) | 日志保留時(shí)間小時(shí) |
log.retention.minutes | 日志保留時(shí)間分鐘 | |
log.retention.ms | 日志保留時(shí)間毫秒 | |
file.delete.delay.ms | 60000 (1分鐘) | 延遲執(zhí)行刪除時(shí)間 |
log.retention.bytes | -1 無(wú)窮大 | 運(yùn)行保留日志文件最大值 |
log.retention.bytes | 1073741824 (1G) | 日志文件最大值 |
Kafka會(huì)根據(jù)檢測(cè)頻率周期性的檢測(cè)日志是否需要?jiǎng)h除,日志刪除策略主要有以下集中:
- 基于時(shí)間的刪除策略
- 基于文件大小的刪除策略
- 基于日志文件起始偏移量
基于時(shí)間刪除
Kafka會(huì)查找日志段的時(shí)間戳索引文件中的最后一條記錄,如果最后一條timestamp小于0,則取最近修改時(shí)間。
當(dāng)確認(rèn)完需要?jiǎng)h除的日志段以后,需要進(jìn)行以下刪除操作:
- 從日志對(duì)象中所維護(hù)日志分段的ConcurrentSkipListMap中移除待刪除的日志分段,保證沒(méi)有線程對(duì)這些日志分段進(jìn)行讀取操作。
- 為日志段中的所有文件加上.delete后綴
- Kafka中會(huì)有一個(gè)命名為"delete-file"的延遲任務(wù)來(lái)刪除這些無(wú)效的日志數(shù)據(jù)
假如當(dāng)前日志段中也有需要?jiǎng)h除的數(shù)據(jù),那么kafka會(huì)先進(jìn)行分段,創(chuàng)建一個(gè)新的活躍日志段,然后執(zhí)行刪除操作。
基于大小刪除
- 計(jì)算需要?jiǎng)h除的日志大小的總和(當(dāng)前日志大小-所允許的日志文件最大值)
- 然后從第一個(gè)日志分段開(kāi)始查找,查找可以進(jìn)行刪除的日志段集合
- 最后執(zhí)行刪除操作
基于日志文件起始偏移量
日志文件起始偏移量默認(rèn)等于第一個(gè)日志段的基準(zhǔn)偏移量,但隨著數(shù)據(jù)的刪除操作,該值也在不斷變化。
基于日志文件起始偏移量的判斷規(guī)則是,如果一個(gè)日志段的下一個(gè)日志段的起始偏移量如果小于日志文件起始偏移量,那么該日志段就可以被加入到刪除隊(duì)列,最后執(zhí)行刪除。
以上就是Kafka日志清理實(shí)現(xiàn)詳細(xì)過(guò)程講解的詳細(xì)內(nèi)容,更多關(guān)于Kafka日志清理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MyBatis映射文件中的動(dòng)態(tài)SQL實(shí)例詳解
在本文中,我們深入探討了動(dòng)態(tài)SQL的各種標(biāo)簽,包括<if>、<choose>、<trim>、<foreach>等,通過(guò)實(shí)際的例子演示了它們的用法,感興趣的朋友一起揭開(kāi)動(dòng)態(tài)SQL的神秘面紗,帶你領(lǐng)略它的魅力2024-01-01java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort)
這篇文章主要介紹了java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01spring自定義一個(gè)簡(jiǎn)單的Starter啟動(dòng)器
這篇文章主要介紹了spring自定義一個(gè)簡(jiǎn)單的Starter啟動(dòng)器,一個(gè) starter其實(shí)就是對(duì)一個(gè)功能的集成封裝,然后對(duì)外提供一個(gè)依賴(lài),讓業(yè)務(wù)去使用,像我們熟悉的 Redis,mongo,mybatis 等均屬于,需要的朋友可以參考下2023-07-07深入淺析SPI機(jī)制在JDK與Spring?Boot中的應(yīng)用
SPI是一種使軟件框架或庫(kù)更加模塊化、可擴(kuò)展和可維護(hù)的有效方法。通過(guò)遵循“開(kāi)閉原則”,?SPI?確保了系統(tǒng)的穩(wěn)定性和靈活性,從而滿(mǎn)足了不斷變化的業(yè)務(wù)需求,這篇文章主要介紹了SPI機(jī)制在JDK與Spring?Boot中的應(yīng)用,需要的朋友可以參考下2023-09-09mybatis-plus 處理大數(shù)據(jù)插入太慢的解決
這篇文章主要介紹了mybatis-plus 處理大數(shù)據(jù)插入太慢的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Spring學(xué)習(xí)筆記之RestTemplate使用小結(jié)
這篇文章主要給大家介紹了關(guān)于Spring學(xué)習(xí)筆記之RestTemplate使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)
這篇文章主要介紹了使用Spring Boot ApplicationRunner解析命令行中的參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12Spring MVC Mybatis多數(shù)據(jù)源的使用實(shí)例解析
項(xiàng)目需要從其他網(wǎng)站獲取數(shù)據(jù),因?yàn)槭桥R時(shí)加的需求,這篇文章主要介紹了Spring MVC Mybatis多數(shù)據(jù)源的使用實(shí)例解析,需要的朋友可以參考下2016-12-12