在 zookeeper 中删除一个 kafka 消费者组

Posted

技术标签:

【中文标题】在 zookeeper 中删除一个 kafka 消费者组【英文标题】:removing a kafka consumer group in zookeeper 【发布时间】:2015-05-28 10:17:57 【问题描述】:

我将 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

更多讨论见下文

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的输入,但这在 v0.8.1.1 中不可用(如问题中所述)。它在最新版本 (0.10.0.0) 中可用 tar tvfz kafka_2.9.2-0.8.1.1.tgz | grep consumer | cut -c 49- kafka_2.9.2-0.8.1.1/bin/kafka-simple-consumer-shell.sh kafka_2.9.2-0.8.1.1/bin/kafka-console-consumer.sh kafka_2.9.2 -0.8.1.1/bin/kafka-simple-consumer-perf-test.sh kafka_2.9.2-0.8.1.1/bin/kafka-consumer-perf-test.sh kafka_2.9.2-0.8.1.1/bin/windows/kafka -console-consumer.bat kafka_2.9.2-0.8.1.1/config/consumer.properties @foo-l 我知道它在 0.8 版本中不存在。由于 kafka 的更新,我认为这将有助于目前正在搜索该问题的人们。 如果这不起作用,从zk中删除。 rmr /consumers/【参考方案2】:

对于新的消费者(使用 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.

这是响应的重要部分:

请注意,无需删除新使用者的组元数据,因为该组在该组的最后提交偏移量到期时被删除。

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

在没有kafka-consumer-groups 实用程序的 kafka 版本下提出的原始问题 不可能,正在获取: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.【参考方案4】:

目前,据我所知,删除 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?,但它没有给我太多帮助。

【讨论】:

只是清理命名错误的消费者组或随机控制台消费者组。谢谢! 相关:What determines Kafka consumer offset? 注意auto.offset.reset 在消费者组有偏移后被忽略,因此如果关闭,他们可以从中断的地方继续。这让我感到困惑,但开发人员证实了这一点。您可以手动删除组,或者下次运行使用 earliestsmallest 标志启动新的 group.id 并重新开始。查看 Burrow 并拥有用于从 LinkedIN 团队删除组和其他维护和滞后检查的 API。 如果使用 Kafka 的 CLI,请将 --from-beginning 标志添加到您的 kafka-console-consumer ... 调用以重播主题 只是为了帮助任何搜索有关如何在 zookeeper 中删除消费者路径的命令的人。首先连接到zookeeper ./zookeeper-shell.sh localhost:2181,然后用get /consumers/<group-id>检查节点(这是可选的),最后用rmr /consumers/<group-id>删除组。

以上是关于在 zookeeper 中删除一个 kafka 消费者组的主要内容,如果未能解决你的问题,请参考以下文章

Apache Kafka 删除 Apache ZooKeeper 的依赖

删除zookeeper中的kafka使用者组

kafka(0.8版本)删除主题(没有在配置文件中配置的情况下)

启动zookeeper和kafka时 kafka无法启动或者闪退

zookeeper+kafka,使用Java实现消息对接读取

Kafka和Storm环境下如何实现多租户?