message-queue - 消费者平衡如何在卡夫卡发挥作用?

标签 message-queue producer-consumer apache-kafka kafka-consumer-api

添加或关闭新的消费者/经纪人后,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/

相关文章:

apache-spark - 使用结构化流将数组扩展到 spark 中的列

python - Windows安装librdkafka支持Python开发

django - 异步消息队列和处理,如 Django 中的 Amazon Simple Queue 服务

c - 从消息队列中读取(如果为空则非阻塞)

java - java中的线程同步/生产者-消费者。重复打印数字 1-10 然后 10-1

c# - 如果当前失败,如何继续队列中的其他任务?

apache-kafka - 如何从 Kafka 加载数据到 CrateDB?

c# - 队列的并行处理

python - Celery:自动启动工作程序(启动时)

c# - 等待多个不同的脉冲事件