在kafkacat消费者之间共享消息

时间:2015-09-25 11:27:37

标签: apache-kafka

这几乎与此问题相同: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。

2 个答案:

答案 0 :(得分:3)

kafkacat现在支持0.9高级KafkaConsumer:

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

答案 1 :(得分:0)

事实证明这个功能is not supported by librdkafka(kafkacat正在使用的库)。引自Github issue

  

简短回答,现在不支持。此外,无论您在Kafka文档中看到什么,只有在您使用JVM使用者/生产者时才会这样。假设任何其他消费者/生产者实现都不完全遵循doc。