繁体   English   中英

Kafka 多个分区不会在多个消费者之间拆分

[英]Kafka multiple partitions not getting split among multiple consumers

我有一个在 Linux 上运行的 Kafka 安装程序。我已将 server.properties 中的分区数设置为 5。我还将我正在使用的主题(让我们称之为 topic1)的分区数设置为 5。

现在,我有 5 个消费者(用 Java 实现)订阅了上述主题。 我期望所有 5 个分区应该在所有 5 个消费者之间平均分配流量。

我尝试了以下内容:

  1. 确保在主题级别和 server.properties 中将分区数设置为 5。

  2. 我运行以确保该主题有 5 个分区:

    kafka-topics.sh --zookeeper localhost:2181 --describe --topic topic1 Topic: topic1 TopicId: 4kX9oP3ARA2uHQ1_nVGY-Q PartitionCount: 5 ReplicationFactor: 1 Configs: Topic: topic1 Partition: 0 Leader: 0 Replicas: 0 Isr: 0 Topic: topic1 Partition: 1 Leader: none Replicas: 1 Isr: 1 Topic: topic1 Partition: 2 Leader: none Replicas: 2 Isr: 2 Topic: topic1 Partition: 3 Leader: none Replicas: 3 Isr: 3 Topic: topic1 Partition: 4 Leader: none Replicas: 4 Isr: 4

  3. 我还在另一个设置中运行了类似的配置,在 Windows 设置中有 5 个分区和 5 个消费者。 但是在那里,我可以看到所有 5 个消费者都在平等地获取数据。

  4. 但是在我上面提到的 Linux 设置中,它总是只有 1 个消费者。

关于如何调试此问题的任何输入? 从Kafka-topics describe output可以看出这个topic有5个分区。 但是这 5 个分区仍然没有在 5 个可用的消费者之间分配。

有没有办法通过命令行或 Kafka 日志检查测试运行期间实际使用了多少个分区? 如果 Kafka-topics describe 说有 5 个分区,这是否实际上意味着我们在运行测试时也使用了 5 个分区?

请注意,我正在这台机器上运行负载测试 - 超过 100 个用户触发数据。

期望所有 5 个分区应该在所有 5 个消费者之间平均分配流量

这不是分区的工作方式。

您的生产者(不清楚您使用的是什么;Kafka 包含自己的producer-perf-test CLI 工具)指定记录到达的位置。 如果您为每条记录提供非空键,则分区将根据这些值的 hash 进行计算,并且可能存在重叠,导致没有分区获取任何记录。 仅当您的生产者使用null 键时,数据才会在同一请求中循环,而不是“在多次运行中平均分配”

使用GetOffsetShell检查哪些分区有数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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