假设具有3个分区的kafka主题被3个消费者的消费者群体使用。在云环境中,如果新的消费者扩大规模,现在该组中有4个消费者。在这种情况下会发生什么?
OR
答案 0 :(得分:2)
Kafka是否会创建另一个分区,以便新的消费者可以访问它?
不,Kafka不会为新消费者创建另一个分区。我建议你阅读kafka docs以了解kafka的架构。
事实上,消费者只是客户端,而kafka主题位于kafka经纪人处,可称为服务器。所以你应该得到添加消费者只是添加一个客户端。对于服务器,它只是添加一个连接。实际上,Kafka主题的分区设置是在创建主题时指定的,您也可以在此之后更改此配置。请参阅此http://kafka.apache.org/documentation/#operations以了解如何创建主题和修改。
新消费者是否闲置并且不消耗任何东西?
YES。当消费者在消费者群体中添加或删除时,它将触发消费者重新平衡操作。
消费者重新平衡算法允许组中的所有消费者就消费者正在消耗哪些分区达成共识。每次添加或删除同一组中的代理节点和其他使用者时,都会触发消费者重新平衡。对于给定主题和给定的消费者组,代理分区在组内的消费者之间平均分配。分区始终由单个使用者使用。这种设计简化了实施。如果我们允许多个使用者同时使用分区,则会在分区上产生争用,并且需要某种锁定。如果消费者多于分区,则一些消费者根本不会获得任何数据。在重新平衡期间,我们尝试以减少每个消费者必须连接的代理节点数量的方式为消费者分配分区。
注意这一点:一个分区总是由一个消费者消费。&& 如果消费者多于分区,则某些消费者根本不会获得任何数据。并且第一个单词具有前提条件:在同一个消费者群组中。 如果两个消费者属于不同的组,它可以使用相同的分区。您可以参考此http://kafka.apache.org/documentation/#impl_brokerregistration以获取有关重新平衡算法的更多信息。
该算法非常简单,它首先计算一个比率=分区计数/消费者计数。然后通过分区的brokerID按顺序将分区分配给消费者。它用于减少每个经纪人的连接数。
所以在你的问题中,它根本不会改变。我认为在kafka服务器代码中,必须有一个判断:
if partition_count <= consumer_count
just return, do not do the rebalancing.