kafka 數據定時刪除實驗


因硬盤太小,數據量太大 不得不將數據的保存時間從默認的7天變為一天 

設置了參數log.retention.hours=24  但是發現3天前的數據還是存在 

查詢官方文檔發現

活動的segment是不會壓縮的 ,做了幾個實驗看有沒有方法能夠刪除一直在發的topic數據

 

實驗一

添加一個testdelet的topic  每隔10s發送一次數據 ,看一個小時是否會清除一個小時前數據 ,區別:每條記錄發送結束后會關閉kafka連接

image.png

觀察時間 14:59分  發現未刪除   結論 不分片沒有用

 

 

實驗二

修改server.properties d文件 設置

log.retention.hours=1

log.retention.ms=3600000

log.cleanup.polict=delete

log.segment.delete.delay.ms=60000

log.cleanup.interval.mins=10

log.retention.check.interval.ms=600000

看是否有不同變化

結論 和之前沒有區別 數據沒有區別, 該實驗無效

 

實驗三:

查看kafka tool在讀取數據是否會對刪除產生影響

結論 無影響  該實驗無效

 

實驗四 :

在  15.10分左右給control發送200條數據 ,看多少時間之后會被刪除數據

image.png

 

 

實驗五

停止一組topic的發送,看是否有變化  ,寫修改

image.png

./kafka-configs.sh   --entity-name simulator_250 --zookeeper localhost:2181 --entity-type topics  --alter --add-config  segment.bytes=10000000,retention.ms=3600000,retention.bytes=20000000

1. 關閉發送程序 10分鍾后查看是否會刪除歷史數據

結論 不會被刪除數據

2.將topic從消費者處刪除  ,查看是否有效

結論 沒有刪除

3.等待刪除時間

image.png

image.png

 

結論在 00000000.log的最后一條數據等待一個小時后 該數據被刪除了 

image.png

其他的日志也在陸續過來1個小時后刪除

 

結論 kafka數據是否刪除和是否有數據消費讀取沒有關系 ,和最后一個片段的最后一條數據的時間間隔有關

 

實驗六

修改 segment.bytes=10000000,retention.ms=3600000

image.png

看1個小時后是否能夠刪除舊的文件片段

結果:

image.png

能夠刪除  刪除片段的開始時間11.20,最后時間 14.10分 真正刪除時間 14:50分  

 

 

結論   切片后能夠刪除  其他topic沒有刪除

 

實驗全部結論:

kafka數據想要刪除需要設置 log.roll.hours(輪轉時間)或是segment.bytes(文件大小)  控制日志文件一個最大為多大或多久切片 ,當上個日志文件的最后一條時間到達了log.segment.hours的時間后,上一條日志就會刪除  ,或是該topic等待log.segment.hours時間沒有數據進入  該topic會被刪除

或是默認情況下 segment到達了1G自動分片  或是達到7天自動分片 導致舊的數據被刪除

 

 默認刪除的輪訓時間是10分鍾,所以可能部分的的時間有一點區別 

所有在配置中加入 log.roll.hours=12既可以解決問題

 


免責聲明!

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



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