Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 卡夫卡添加新的消费者不会重新平衡负载_Apache Kafka - Fatal编程技术网

Apache kafka 卡夫卡添加新的消费者不会重新平衡负载

Apache kafka 卡夫卡添加新的消费者不会重新平衡负载,apache-kafka,Apache Kafka,我有一个主题,在2个代理上有3个分区。卡夫卡版本:0.8.1 消息是使用以下不同的用户guid进行批量添加的:FC42B34DD7658503E040970A2C437358作为分区键。大约10000条信息 在加载消息时,我有一个正在运行的consumer consumer1,它开始很好地处理消息。 然后我启动了另一个具有相同消费者组id的消费者2 我注意到,consumer1停止处理消息,consumer2开始处理所有消息 当我停止consumer2时,consumer1接管并恢复消息处理 我

我有一个主题,在2个代理上有3个分区。卡夫卡版本:0.8.1

消息是使用以下不同的用户guid进行批量添加的:FC42B34DD7658503E040970A2C437358作为分区键。大约10000条信息

在加载消息时,我有一个正在运行的consumer consumer1,它开始很好地处理消息。 然后我启动了另一个具有相同消费者组id的消费者2

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

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

我希望两个用户都应该分配负载


有没有线索表明问题出在哪里?谢谢。

如果没有对Zookeeper集群进行一些检查,我不确定您的消费者到底发生了什么,但我可以怀疑一种可能的情况,即您的生产者可能无法将消息均匀地分发到分区

分区由单个使用者组中的单个使用者拥有。所有者使用者称为分区所有者,进入分区的所有消息都由分区所有者独占使用。有关更多信息,请参阅卡夫卡0.8.1文档中的

假设有三个分区A、B、C和两个使用者1和2,生产者只向分区B发送消息

当只有使用者1时,分区B的所有消息都由使用者1使用

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

停止使用者2后,分区B将再次分配给使用者1,并且使用者1将使用所有消息


我能想到的就是上面的情景。检查您的producer实现是否存在分发问题。

这是因为我在客户端上配置了stream=3吗?即使在我将stream更改为1后,一段时间~20分钟后,仍有一个使用者停止处理,也就是说,一次只有一个使用者处理消息。我使用了默认分区策略,用户guid为FC42B34DD7658503E040970A2C437358作为分区键。对于这种分区密钥,有没有其他更好的分区算法来实现更均衡的分布?谢谢。@heyu如果密钥相同,默认分区程序将向同一分区发送消息。如果即使在生产过程中,键也总是相同的,我建议不要使用消息键。如果发送不带密钥的消息,Kafka将使用随机分区器。如果您需要其他内容,请尝试使用循环分区器。@heyu请注意,随机分区器并不是向分区随机发送消息。它选择一个分区,并坚持将消息发送到所选分区一段时间(默认为10分钟)。有关更多信息,请参阅我在上面提供的链接。我没有使用与分区键相同的值,我只是给出了一个示例,说明用户guid将是这样的-不同的用户将具有不同的guid。只是想知道这样的值,随机分区如何分配值。@heyu这里是默认分区器的代码:它对键的哈希进行简单的mod计算:Utils.abskey.hashCode%numPartitions