0%

Kafka __consumer_offsets 占用磁盘空间过大处理

__consumer_offsets 占用磁盘空间过大处理


前言

生产环境上有一台Kafka机器磁盘告警,通过查看发现kafka的日志储存目录数据盘占用80%的存储,发现是__consumer_offsets的储存文件过大导致的

原因

Kafka 中用于保存消费者消费位移的主题__consumer_offsets与普通topic在清理策略上不同,使用的就是Log Compaction策略。

Log Compaction是kafka提供的一种整理offset数据的方式。Log Compaction对于有相同key的的不同value值,只保留最后一个版本。如果应用只关心key对应的最新value值,可以开启Kafka的日志清理功能,Kafka会定期将相同key的消息进行合并,只保留最新的value值。

清理

查看现有的__consumer_offsets清理策略

1
bin/kafka-configs.sh --zookeeper xxxx:2181 --entity-type topics --entity-name __consumer_offsets --describe

查看第一行输出可以看到 cleanup.policy=compact,则说明cleanup.policy是compact

__consumer_offsets的确与普通topic在清理策略上不同,也就是参数cleanup.policy上,给__consumer_offsets手动添加了清理策略

1
bin/kafka-configs.sh --zookeeper xxxx:2181 --entity-type topics --entity-name __consumer_offsets --alter --add-config 'cleanup.policy=delete'

添加完后,等了一会磁盘占用就会减少


参考链接