这几乎与此问题相同:Messages sent to all consumers with the same consumer group name。接受的答案是使用Kafka 0.8.1或更新,我做了。
如果所有消费者实例都具有相同的消费者群体,那么这就像传统的队列平衡消费者的负担一样。
但是我无法使用Kafka 0.8.2.1和kafkacat来观察这种行为。
我的设置:
首先,在运行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。
答案 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。