为什么消费位点过期了却仍未被删除?

问题现象

2.2.0版本云消息队列 Kafka 版服务端,某Group下的消费位点已经超过了我设置的消费位点保留时间,但却未被删除,还可以在云消息队列 Kafka 版控制台Topic 详情页面的订阅关系页签,查看目标Topic消费详情

说明

消费位点保留时长是消费位点的最大保留时长,从提交消费位点的时间开始计算,超过该时长的消费位点将被删除(注意,删除消费位点并非消费位点置为0,而是无消费位点)。每向一个Topic分区提交一次消费位点,该消费位点的保留时间计时器就会被重置为0。更多信息,请参见变更消息配置

可能原因

根据开源Kafka的设计,活跃Group的消费位点超过了消费位点保留时间,该消费位点也不会被删除。

说明

Group中,存在订阅消费者(区别于assign)线程,则该Group是活跃Group。

例如,您创建了名为TestGroupGroup来订阅TopicA,并成功提交了消费位点。由于业务调整,您取消订阅TopicA,同时新订阅了TopicB。此时,TestGroup处于活跃状态,该GroupTopicATopicB上的消费位点都不会被删除。

如果您只取消订阅TopicA,同时没有新订阅TopicB,那么TestGroup处于不活跃状态。TestGroupTopicA上的消费位点超过了保留时间会被删除。

解决方案

如果您希望删除已过期的消费位点,请参见以下操作进行处理:

  1. 断开Group连接,将其处于不活跃状态,请根据业务情况执行以下操作:

    • 等待消费位点过期。过期后,消费位点被自动删除。

    • 可以通过控制台按分区重置位点方式将已过期消费位点重置到0。

    • 迁移到新的Group,然后让原Group的所有消费线程处于非活跃状态,待原Group消费位点过期。过期后,消费位点被自动删除。

  2. 升级服务端版本到2.6.0。

无需断开连接,取消业务不需要Topic的订阅。如TestGroup取消TopicA的订阅后,保留TopicB的订阅且活跃,TestGroup+TopicA的消费位点超过最大保留时长后被清理。