node.js - Kafka(kafka-node)消费者组接收来自所有分区的消息
问题描述
我有一个名为“test-topic”的主题,有 3 个分区。
当我启动一个将 group-id 设置为“test-group”的消费者(consumer-1)时,它会连接并从该主题的所有分区中读取。到目前为止,一切都很好。
当我在同一组中启动另一个消费者(消费者 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 尝试此代码)。
推荐阅读
- python - 如何获取一个 JSON 文件而不是数千个?
- ruby - 尝试使用 rspec 在 ruby 中创建一个线程,该线程可以使用不同的参数并行运行多个测试
- python - 为什么我的函数在理论上不应该覆盖变量?(Python 3.8)
- c++ - 如何知道应该使用 C++ 中的适配器定义哪个 XSD 元素?
- android - Android“singleTask”活动创建活动的新实例
- google-bigquery - 列的所有记录的简单 SUM 在 Big Query 中不起作用
- reactjs - 如何从 react-leaflet Marker 传递和获取其他数据/值?
- python - 将 Python 列表编码为唯一值的索引
- javascript - 如何从nodejs中的html标签解析获取文本?
- nginx - AKS 标准负载均衡器 TCP 重置注释