添加新消费者的Kafka不会重新平衡负载

时间:2015-03-27 20:25:12

标签: apache-kafka

我在2个代理上有一个包含3个分区的主题。 (卡夫卡版本:0.8.1)

使用不同的用户guid(例如:FC42B34DD7658503E040970A2C437358)作为分区密钥批量添加消息。 (约10k消息)

在加载消息时,我有一个正在运行的消费者(consumer1),它开始正确处理消息 然后我启动了另一个具有相同消费者组ID的消费者(consumer2)。

我注意到,consumer1停止处理消息,而consumer2开始处理所有消息。

当我停止使用consumer2时,consumer1接管并恢复消息处理。

我期待两个消费者都应该分配负载。

任何可能是问题的线索?感谢。

1 个答案:

答案 0 :(得分:0)

我不确定在没有对Zookeeper群集进行检查的情况下,您的消费者会发生什么,但我可能会怀疑您的生产者可能无法将消息均匀地分发到分区。

分区由单个使用者组中的单个使用者拥有。所有者使用者称为partition owner,所有进入分区的消息都由其分区所有者专门使用。 (有关更多信息,请参阅Kafka 0.8.1文档中的Consumers

我们假设有三个分区A,B,C和两个消费者1和2,生产者只向分区B发送消息。

当只有消费者1时,消费者1消耗分区B的所有消息。

当您引入消费者2时,现在通过消费者重新平衡算法将分区B分配给消费者2。由于您的生产者仅向分区B发送消息,现在消费者2成为唯一消费消息的消费者。

停止消费者2后,分区B再次分配给消费者1,消费者1消费所有消息。

以上情况是我能想到的。检查生产者实现是否存在分发问题。