清理offset_[Kafka]为__consumer_offset设置自动清理规则

本文介绍了如何解决Kafka服务器因__consumer_offsets topic占用过多存储空间的问题。通过删除特殊清理策略并设置新的清理规则,实现7天前数据的自动删除,同时讨论了可能存在的重复消费风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此法可能有风险,还请读完文章再操作。

本文中的命令可以在Kafka非启动状态下执行。

起因

Kafka服务器在运行几个月后,存储空间耗尽了。分析Kafka的占用空间情况,发现Kafka自动生成的“__consumer_offset”topic,占用了大量空间,它用于记录每个用户topic的消费偏移量。这一topic适用的清理规则与其他topic不同,某些特殊情况下,它可能一直得不到清理,耗尽服务器资源。

查看清理策略

由于服务器上的Kafka版本较老,这里使用的参数是--zookeeper,而非−−bootstrap-server参数。

使用以下命令查看清理策略:

./kafka-configs.sh --zookeeper zk01:2181,zk02:2181,zk03:2181/kafka --entity-type topics --entity-name __consumer_offsets --describe

在这台服务器上,得到了下面结果:

Configs for topics:__consumer_offsets are segment.bytes=104857600,cleanup.policy=compact,compression.type=uncompressed

翻译一下就是:每个文件块大小100MB,清理策略为压缩,压缩策略为不压缩。

那当然服务器空间会被用完了。

处理

首先,将处理__consumer_offset的特殊清理策略删除:

./kafka-configs.sh --zookeeper zk01:2181,zk02:2181,zk03:2181/kafka --entity-type topics --entity-name __consumer_offsets --alter --delete-config cleanup.policy

据说这样已经可以让这里的清理策略与普通topic一致了,但是以防万一,再手动添加一组清理策略:

./kafka-configs.sh --zookeeper zk01:2181,zk02:2181,zk03:2181/kafka --alter --entity-name __consumer_offsets --entity-type topics --add-config retention.ms=604800000

./kafka-configs.sh --zookeeper zk01:2181,zk02:2181,zk03:2181/kafka --alter --entity-name __consumer_offsets --entity-type topics --add-config cleanup.policy=delete

这两行命令将__consumer_offset的清理逻辑调整为“清理7天前数据,清理策略为删除”

之后,将Kafka运行起来,就能看见大量数据被标记删除,静静等待一分钟(如果延时参数没被调整的话),Kafka就会自动将7天前的数据删除了。后续也不必操心服务器空间问题。

风险

虽然服务器空间问题得到了解决,但也有一个疑问:这是否会导致一些分区的offset记录消失,导致重复消费?

举例来说:一个topic有200条记录,消费者在8天前消费了100条,这8天内无消费者消费,也无生产者生产。

那么如果这个消费者在今天去消费,由于之前的消费记录超过7天无变化,很有可能已被删除。那消费者是否会从0号消息开始消费?

目前的环境中,topic保存数据也有7天的限制,规避了这个问题,但它确实有导致一些问题的可能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值