在不知道主题名称的情况下通用删除过时的 Kafka 消费者偏移量

问题描述

在我的系统中,Kafka 消费者订阅主题列表发生了变化。

一些主题已经添加,一些不再订阅,还有一些以前订阅过,现在还在订阅

我想删除活动消费者不再订阅主题 的 ConsumerGroup 偏移量。否则这些主题的滞后仍然会被列出并增加,从而导致监控中的错误声明

我知道 --delete-offsets CLI 工具的 kafka-consumer-groups 选项。但在这里我需要知道受影响的主题并将它们全部列出。是否有一种通用方法可以在不知道主题名称的情况下删除活动消费者的过时主题

谢谢!

解决方法

您可以更改 __consumer_offsets 主题的配置并进行操作。

  1. cleanup.policy 配置更改为 delete

    cleanup.policy 的默认 __consumer_offsets 被压缩,因此旧消息永远不会被删除,因为同一个键没有新消息。因为你在听不同的主题分区。

  2. retention.ms 更改为 86400000(一天)或您的首选持续时间

    主题的默认 retention.ms 为 604800000(7 天)。将其减少到一天(首选时间)将删除 cleanup.policy=delete 主题中早于此时间的过去日志。

等待保留时间。它将删除旧日志

  1. cleanup.policy主题中再次将compact更改为__consumer_offsets

    这是最重要的一步。因为否则,如果您的消费者暂停一段时间,最后消费的偏移量将从 __consumer_offsets 主题中删除,并且没有任何痕迹。

为此,您无需了解过去的主题或消费者组 ID。但这是有风险的,因为您的所有消费者组上次消费的偏移量都会被删除。

如果这不能清除您的旧日志,请检查您的段。因为可能不会推出细分市场。如果没有旧段,您需要减少 segment.mssegment.bytes 以频繁推出段。并回滚这些更改。