删除zookeeper中的kafka使用者组

时间:2015-03-24 22:15:10

标签: apache-zookeeper apache-kafka

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

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

5 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分:20)

对于新的消费者(使用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期间发生的事情),但我还没有找到任何可以轻松实现这一目标的工具。

答案 2 :(得分:17)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-2)

我与消费者群体存在问题并希望删除该群组。以下方法对我有用:

  • 在Kafka offsets.retention.minutes=1文件中设置server.config并重新启动Kafka服务器
  • 关闭/退出使用使用者组的进程
  • 将此主题/分区的偏移量设置为0(类似于kafka-consumer-groups.sh --bootstrap-server yourserver:9092 --group yourgroup --reset-offsets --to-latest --all-topics --execute

不要忘记设置参数并重新启动Kafka。