【发布时间】:2019-02-20 07:55:16
【问题描述】:
这与这个问题几乎相同:Messages sent to all consumers with the same consumer group name。公认的答案是使用 Kafka 0.8.1 或更高版本,我这样做了。
如果所有消费者实例都有相同的消费者组,那么这就像传统的队列平衡消费者负载一样。
但我无法使用 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