考虑到以下情况:有一个带有2个分区和一个使用者的Kafka(2.1.1)主题。生产者将带有keyX的消息发送到Kafka,该消息最终到达分区2。消费者开始处理此消息。同时,新的消费者开始了,卡夫卡重新平衡了这个话题。现在,使用者1仅负责分区1,使用者2负责分区2。生产者再次使用相同的keyX发送一条消息,这次将由使用者2处理该消息。
消费者1尚未完成时,消费者2可能正在处理该消息。
我的问题是这是否现实,因为如果不同的使用者同时处理具有相同密钥的消息对我来说可能是个问题。
对此表示欢迎,非常感谢!
答案 0 :(得分:0)
是的,这是一个现实的场景。然而,在重新平衡期间,消费者1将关闭其所有现有连接。在您的情况下,使用者1将关闭与分区1和2的连接,因此在消息处理之前它可能尚未提交其偏移量。这可能取决于您是否已将属性enable.auto.commit
的使用者配置为true。将此属性设置为true时,使用者将定期提交其当前偏移量。期间用auto.commit.interval.ms
定义。
由于消费者监听器[ConsumerRebalanceListener][1]
,当出现重新平衡时,您也可以成为贵族。它使您能够知道何时撤销或重新分配了分区。