[英]Kafka (kafka-node) consumer group receives messages from all partitions
我有一个名为“test-topic”的主题,有 3 个分区。
当我启动一个消费者 (consumer-1) 并将 group-id 设置为“test-group”时,它会连接并读取该主题的所有分区。 到现在为止还挺好。
当我在同一组中启动另一个消费者(consumer-2)时,问题就出现了。 我希望它能够在两个消费者之间重新平衡划分分区,例如消费者 1 获得分区 0 和 2,消费者 2 获得分区 1。这不会发生,当然我确实得到了这些重新平衡回调,但最终,两个消费者都从同一个分区读取。
更奇怪的是,如果我启动另一个 Kafka 附带的消费者(kafka-console-consumer.sh),那么它将按预期重新平衡并划分所有消费者之间的所有分区。
我正在使用具有以下选项的 kafka-node:
options = {
groupId: 'test-group',
kafkaHost: 'localhost:32769',
protocol: ['range'],
fromOffset: 'latest'
}
let topics = ['test-topic']
let consumer = new KafkaConsumerGroup(options, topics)
我看到运行以下命令: kafka-consumer-groups.sh --bootstrap-server localhost:32769 --describe --group test-group --members --verbose
如果我只从我的 nodejs 项目运行我的两个消费者,那么一行是一个消费者分配给所有分区。 但是 CONSUMER-ID 在我的两个客户端之间来回切换。
当我启动命令行客户端( bin/kafka-console-consumer.sh --bootstrap-server localhost:32769 --topic test-topic --from-beginning --group test-group
)时,它发生了变化,所有三个消费者出现并在每个分区之间进行划分。 一旦我删除了 kafka-console-consumer 客户端,它就会回到我之前描述的内容。
我是否误解了分区和消费者组的概念,或者我的配置有误?
我希望它能够在两个消费者之间重新平衡划分分区,例如消费者 1 获得分区 0 和 2,消费者 2 获得分区 1
你是对的。
我是否误解了分区和消费者组的概念,或者我的配置有误?
正如我所看到的,你所做的一切都是正确的。 我认为这是 kafka-node 库中的一个错误,如果您使用的是最新版本(例如 2.3),我建议您尝试降级 Kafka 版本(例如,使用 Kafka 2.1.0 尝试此代码)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.