【问题标题】:Sharing messages between kafkacat consumers在 kafkacat 消费者之间共享消息
【发布时间】:2019-02-20 07:55:16
【问题描述】:

这与这个问题几乎相同:Messages sent to all consumers with the same consumer group name。公认的答案是使用 Kafka 0.8.1 或更高版本,我这样做了。

Kafka documentation says:

如果所有消费者实例都有相同的消费者组,那么这就像传统的队列平衡消费者负载一样。

但我无法使用 Kafka 0.8.2.1 和 kafkacat 观察到这种行为。

我的设置:

  • Kafka + Zookeeper 在spotify/kafka 容器中运行(通过 boot2docker)
  • 一个制作人
  • 具有相同 group.id 的两个消费者

首先,在运行 Kafka 容器时,我创建了一个主题:

$KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic beta

两个消费者订阅了同一个主题:

kafkacat -C -b $(boot2docker ip):9092 -t beta -X group.id=mygroup

然后我使用 kafkacat 生成一条消息:

date | kafkacat -P -b $(boot2docker ip):9092 -t beta

我希望只有一个消费者收到消息,但实际上他们都收到了。我做错了什么?

编辑:当我尝试使用 kafka-console-consumer.sh 运行相同的消费者时,一切都很好:

echo "group.id=mygroupid" > /consumer.beta.properties

$KAFKA_HOME/bin/kafka-console-consumer.sh \
  --zookeeper localhost:2181 \
  --topic beta \
  --consumer.config /consumer.beta.properties

一切都按预期工作:消息只被消费一次。我认为问题在于 kafkacat。

【问题讨论】:

  • 目前仅通过使用 Zookeeper 支持平衡的消费者组,这只有官方 Java/Scala 消费者实现。但从 Apache Kafka 0.9(将于 2015 年 11 月发布)开始,将支持基于代理的消费者组。届时 librdkafka 和 kafkacat 也将支持这一点。

标签: apache-kafka


【解决方案1】:

kafkacat 现在支持 0.9 高级别的 KafkaConsumer:

kafkacat -b <broker> -G <groupid> topic1 topic2..

【讨论】:

    【解决方案2】:

    原来这个功能is not supported by librdkafka(kafkacat 正在使用的库)。引用自Github issue

    简短回答,目前不支持此功能。此外,只有在您使用 JVM 消费者/生产者时,您在 Kafka 文档中看到的内容才是正确的。假设任何其他消费者/生产者实现不完全遵循文档。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2020-07-08
    相关资源
    最近更新 更多