问题现象

2.2.0及以上 云消息队列 Kafka 版 服务端版本,某Group下的消费位点已经超过了我设置的消费位点保留时间,但却未被删除,还可以在 云消息队列 Kafka 版 控制台 的订阅关系里看到对应的消费位点。

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

可能原因

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

说明 有任一存活的消费者线程的 Group 则是活跃 Group

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

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

此场景下,如果无法接受消费位点保留时间的等待时长,则需新建一个 Group 订阅TopicB,而非使用订阅过TopicA的TestGroup。如果能够接受,则可等到TopicA的消费位点被删除后,再使用TestGroup订阅TopicB。

解决方案

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

  1. 如果需要继续保持 Group 处于活跃状态,则可以通过控制台按分区重置位点方式将已过期消费位点重置到0。具体操作,请参见 重置消费位点
  2. 如果可以断开 Group 连接,将其处于不活跃状态,请根据业务情况执行以下操作:
    • 断开 Group 连接, Group 处于不活跃状态后,等待消费位点过期。过期后,消费位点被自动删除。
    • 将处于活跃状态的 Group 迁移到新的 Group ,然后让原Group的所有消费线程处于非活跃状态,待原 Group 消费位点过期。过期后,消费位点被自动删除。