问题现象
2.2.0及以上 云消息队列 Kafka 版 服务端版本,某Group下的消费位点已经超过了我设置的消费位点保留时间,但却未被删除,还可以在 云消息队列 Kafka 版 控制台 的订阅关系里看到对应的消费位点。
可能原因
根据开源Kafka的设计,活跃 Group 的消费位点超过了消费位点保留时间,该消费位点也不会被删除。
例如,您创建了名为TestGroup的 Group 来订阅TopicA,并成功提交了消费位点。由于业务调整,您取消订阅TopicA,同时新订阅了TopicB。此时,TestGroup处于活跃状态,该 Group 在TopicA和TopicB上的消费位点都不会被删除。
如果您只取消订阅TopicA,同时没有新订阅TopicB,那么TestGroup处于不活跃状态。TestGroup在TopicA上的消费位点超过了保留时间后都会被删除。
此场景下,如果无法接受消费位点保留时间的等待时长,则需新建一个 Group 订阅TopicB,而非使用订阅过TopicA的TestGroup。如果能够接受,则可等到TopicA的消费位点被删除后,再使用TestGroup订阅TopicB。
解决方案
如果您希望删除已过期的消费位点,请参见以下操作进行处理:
- 如果需要继续保持 Group 处于活跃状态,则可以通过控制台按分区重置位点方式将已过期消费位点重置到0。具体操作,请参见 重置消费位点 。
-
如果可以断开
Group
连接,将其处于不活跃状态,请根据业务情况执行以下操作:
- 断开 Group 连接, Group 处于不活跃状态后,等待消费位点过期。过期后,消费位点被自动删除。
- 将处于活跃状态的 Group 迁移到新的 Group ,然后让原Group的所有消费线程处于非活跃状态,待原 Group 消费位点过期。过期后,消费位点被自动删除。