关于kafka:consumer_offsets日志不能自动清理,设置自动清理规则

起因
Kafka服务器在运行几个月后,存储空间耗尽了。剖析Kafka的占用空间状况,发现Kafka主动生成的“__consumer_offset”topic,占用了大量空间,它用于记录每个用户topic的生产偏移量。这一topic实用的清理规定与其余topic不同,某些状况下,它可能始终得不到清理,耗尽服务器资源。

查看清理策略
因为服务器上的Kafka版本较老,这里应用的参数是–zookeeper,而非–bootstrap-server参数。
使用以下命令查看清理策略:

[root@hdp5 bin]# ./kafka-configs.sh --zookeeper hdp3:2181 --entity-type topics --entity-name __consumer_offsets --describe
Configs for topics:__consumer_offsets are segment.bytes=104857600,cleanup.policy=compact,compression.type=producer

每个文件块大小100MB,清理策略为压缩,慢慢服务器空间会被用完。

解决
首先,将解决__consumer_offset的清理策略改为删除:

[root@hdp5 bin]# ./kafka-configs.sh --zookeeper hdp3:2181 --entity-type topics --entity-name __consumer_offsets --alter --delete-config cleanup.policy
Updated config for topic: "__consumer_offsets".

查看__consumer_offsets的清理策略

[root@hdp5 bin]# ./kafka-configs.sh --zookeeper hdp3:2181 --entity-type topics --entity-name __consumer_offsets --describe
Configs for topics:__consumer_offsets are segment.bytes=104857600,compression.type=producer

这可以让__consumer_offsets清理策略与一般topic统一,然而以防万一,可手动增加一组清理策略:

[root@hdp5 bin]# ./kafka-configs.sh --zookeeper hdp3:2181 --alter --entity-name __consumer_offsets --entity-type topics --add-config retention.ms=604800000
[root@hdp5 bin]# ./kafka-configs.sh --zookeeper hdp3:2181 --alter --entity-name __consumer_offsets --entity-type topics --add-config cleanup.policy=delete

上述两行命令将__consumer_offset的清理逻辑调整为“清理7天前数据,清理策略为删除”。
之后重启kafka,能看见大量数据被标记删除,后续再也不用操心服务器空间问题。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐