添加或关闭新的消费者/经纪人后,Kafka会触发重新平衡操作。是Kafka重新平衡阻止操作吗?重新平衡操作进行期间,Kafka消费者是否受到阻拦?
最佳答案
取决于您所说的“受阻”。如果您的意思是“触发重新平衡时现有连接已关闭”,那么答案是肯定的。不幸的是,当前的Kafka的重新平衡算法并不完善。
这是消费者重新平衡过程中发生的事情。
假设我们有一个带有10个分区(0-9)的主题,并且有一个使用它的使用者(将其命名为consumer1
)。当第二个使用者出现(consumer2
)时,他们的重新平衡任务将触发(consumer1
获取一个事件,consumer2
进行初始重新平衡)。现在,consumer1
关闭所有现有连接(甚至那些将很快重新打开的连接),并在Zookeeper中释放所有10个分区的分区所有权。
然后,它运行分区分配算法,并决定应声明哪些分区,然后再次在Zookeeper中声明分区所有权。如果声明成功,consumer1
将开始获取他的新分区。
同时consumer2
也运行分区分配算法,并尝试在Zookeeper中声明其分区。仅当consumer1
在这些分区上释放所有权时,声明才会成功。声明成功后,consumer2
开始获取,或者如果未能在给定的重试次数内声明分区,您将获得rebalance failed after n retries
异常。
如您所见,不仅仅是关闭连接并释放分区的所有权consumer1
不再拥有,它不必要地关闭了他的所有连接并仅用较少的分区重新启动。添加分区的情况相同(当我们使用通配符过滤器使用时,出现新主题)-关闭所有连接,然后再次打开,而不仅仅是打开新连接。
因此,我希望这能回答您的问题-重新平衡开始后,抓取操作就会停止。
关于message-queue - 消费者平衡如何在卡夫卡发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181693/