我在2个代理上有一个包含3个分区的主题。 (卡夫卡版本:0.8.1)
使用不同的用户guid(例如:FC42B34DD7658503E040970A2C437358)作为分区密钥批量添加消息。 (约10k消息)
在加载消息时,我有一个正在运行的消费者(consumer1),它开始正确处理消息
然后我启动了另一个具有相同消费者组ID的消费者(consumer2)。
我注意到,consumer1停止处理消息,而consumer2开始处理所有消息。
当我停止使用consumer2时,consumer1接管并恢复消息处理。
我期待两个消费者都应该分配负载。
任何可能是问题的线索?感谢。
答案 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消费所有消息。
以上情况是我能想到的。检查生产者实现是否存在分发问题。