KAFKA 的TOPIC __consumer_offsets 的清理
生產環境因kafka日志數據量過大,導致磁盤空間占用滿了,通過查看發現kafka的日志儲存目錄kafkadata占用90%的存儲。
再進一步查找,發現目錄下好多__consumer_offsets 生成的儲存文件,每個文件1GB。
查找了一下kafka配置,發現kafka對部分topic的清理策略做了特殊處理,所以導致我們自己配置的清理策略未生效。
查看現有的__consumer_offsets 清理策略
./kafka-configs.sh --zookeeper es01:2181,es02:2181,es03:2181 --entity-type topics --entity-name __consumer_offsets --describe
打印結果如下:
Configs for topic '__consumer_offsets' are segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
刪除特有的清理策略
./kafka-configs.sh --zookeeper es01:2181,es02:2181,es03:2181 --entity-type topics --entity-name __consumer_offsets --alter --delete-config cleanup.policy
網上的資料都說 ,刪除掉__consumer_offsets的特殊的清理策略后,默認會使用我們配置文件的清理策略。(對此我未做驗證)
但為了保險我還是給__consumer_offsets 手動添加了清理策略:
./kafka-configs.sh --zookeeper es01:2181,es02:2181,es03:2181 --alter --entity-name __consumer_offsets --entity-type topics --add-config retention.ms=86400000
./kafka-configs.sh --zookeeper es01:2181,es02:2181,es03:2181 --alter --entity-name __consumer_offsets --entity-type topics --add-config cleanup.policy=delete
./kafka-configs.sh --zookeeper es01:2181,es02:2181,es03:2181 --alter --entity-name __consumer_offsets --entity-type topics --add-config 'max.message.bytes=50000000' --add-config 'flush.messages=50000'
添加完后,等了一會就發現kafka的日志目錄大小已經減少很多了,最終磁盤使用率有90%降到了30%,一次生產磁盤危機就此解決了。