繁体   English   中英

Kafka(kafka-node)消费者组接收所有分区的消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM