Kafka分区策略+水平缩放

uxhixvfz  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(291)

我搞不清楚分区分配在多大程度上是客户端关注的问题 partition.assignment.strategy Kafka负责哪一部分。
例如,假设我有一个带有100个分区的Kafka主题。
如果我做一个应用程序,运行5个线程的消费者,与一个 partition.assignment.strategy 对于rangeassignor,我应该得到5个消费者,每个消费25个分区。
现在,如果我通过部署4次来扩展这个应用程序,并使用相同的用户组。Kafka是否会先将25个分区划分到每一个应用程序中,只有这样,应用程序才能使用分区策略进一步细分这25个分区?
这将产生4个应用程序,每个应用程序有5个使用者,每个使用者有5个分区。

8oomwypt

8oomwypt1#

作为组管理的一部分,使用者将跟踪属于特定组的使用者列表,并在触发以下任一事件时触发重新平衡操作:
任何订阅主题的分区数更改
创建或删除订阅的主题
使用者群组的现有成员已关闭或失败。
新成员将添加到消费者组。
最有可能的第4点是您的案例,所使用的策略将是相同的(partition.assignment.strategy)。并不是说如果您已经显式地指定了使用者要使用的分区,那么这是不适用的

xcitsw88

xcitsw882#

默认赋值器的行为在javadocs中有很好的文档记录。
RangeAssignator是默认的赋值器,有关它生成的赋值示例,请参见其javadoc:http://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/rangeassignor.html
如果有20个使用RangeAssignator的使用者正在使用一个具有100个分区的主题,则每个使用者将被分配5个分区。
因为rangeassignor按主题分配分区,所以如果您有分区很少的主题,它会创建非常不平衡的分配。那样的话,RoundRobinasignor效果更好

相关问题