删除 zookeeper 中的 kafka 消费者组

removing a kafka consumer group in zookeeper

我正在使用 kafka_2.9.2-0.8.1.1 和 zookeeper 3.4.6.

是否有可以自动从 zookeeper 中删除消费者组的实用程序?或者我可以删除 zookeeper 中 /consumers/[group_id] 下的所有内容吗?如果是后者,还有什么我遗漏的吗?可以用实时系统完成吗?

更新: 从 kafka 版本 2.3.0 开始,有一个新的实用程序:

> bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --delete --group my-group

相关文档:http://kafka.apache.org/documentation/#basic_ops_consumer_lag

更多讨论见下文

目前,据我所知,删除 Kafka 消费者组的唯一方法是手动删除 Zookeeper 路径 /consumers/[group_id]

如果你只是想删除一个消费者组,手动删除Zookeeper路径没有什么好担心的,但如果你这样做是为了倒带偏移量,下面的内容会有帮助。

首先,在删除Zookeeper路径之前,应该停止所有属于消费者组的消费者。如果不这样做,这些消费者将不会使用新生成的消息,并且很快就会关闭与 Zookeeper 集群的连接。

当你重启消费者时,如果你想让消费者从头开始,把auto.offset.reset属性给smallest(或者新Kafka中的earliest发布)。 属性 的默认值为 largest(或在新的 Kafka 版本中为 latest),这使得您重新启动的消费者在最大偏移量之后读取,而最大偏移量又只消耗新产生的消息。有关 属性 的更多信息,请参阅 Kafka 文档中的 Consumer Config

仅供参考,Kafka FAQ 中有一个问题 How can I rewind the offset in the consumer?,但对我帮助不大。

从 v0.9.0 开始,Kafka 在 /bin 中附带了一套工具,其中一个是 kafka-consumer-groups.sh 工具。这将删除一个消费者组。 ./kafka-consumer-groups.sh --zookeeper <zookeeper_url> --delete --group <group-name>

对于新消费者(使用 kafka 主题而不是 zookeeper 来管理偏移量),您无法使用 kafka 的内置工具删除组信息。

以下是尝试使用 kafka-consumer-groups.sh 脚本删除新样式消费者的组信息的示例:

bin/kafka-consumer-groups.sh --bootstrap-server "kafka:9092" --delete --group "indexer" --topic "cleaned-logs"
Option '[delete]' is only valid with '[zookeeper]'. Note that there's no need to delete group metadata for the new consumer as the group is deleted when the last committed offset for that group expires.

这是该回复的重要部分:

Note that there's no need to delete group metadata for the new consumer as the group is deleted when the last committed offset for that group expires.

从监控的角度来看这有点烦人(尤其是当通过 burrow 之类的东西跟踪偏移量时),因为这意味着如果您在代码中更改消费者组名称,您将继续看到旧组在这些抵消到期之前落后于他们的抵消。

假设您可以手动为该主题写一个墓碑(这是 offset expiration 期间发生的事情),但我还没有找到任何工具可以让这变得简单。

您可以通过 CLI 从 kafka 中删除组

kafka-consumer-groups --bootstrap-server localhost:9092 --delete --group group_name