ser*_*y_o 5 apache-kafka kafka-consumer-api
Kafka 再平衡算法可以跨主题工作吗?
假设我有 5 个主题,每个主题有 10 个分区,同一消费者组中有 20 个消费者应用程序实例,每个实例都订阅这 5 个主题。
Kafka 会尝试在 20 个实例中均匀平衡 50 个分区吗?
或者它只会在一个主题内平衡,因此第一个 10 个实例可能(或可能)接收所有 50 个分区,而其他 10 个实例可能保持空闲状态?
我知道过去 Kafka 并没有在主题之间保持平衡,但是现在的版本又如何呢?
消费者实例到分区的分配取决于消费者配置 partition.assignment.strategy。它的默认值是,class org.apache.kafka.clients.consumer.RangeAssignor但您也可以选择RoundRobinAssignor,StickyAssignor或者您甚至可以通过扩展抽象类来构建自己的策略AbstractPartitionAssignor。
我认为对于您的情况,循环分配策略将导致更平衡的分配。Range 策略和RoundRobin策略之间的区别如下图所示。
在您的情况下(每个主题中有 10 个分区和 20 个消费者实例),范围策略将导致 10 个实例空闲。然而,使用RoundRobin策略将使所有实例保持忙碌,因为它遵循以下原则:分区将均匀分布,因为分配之间的最大差异应该是一个分区。
请注意,消费者对主题分区的分配与重新平衡不同。当以下情况时启动重新平衡:
消费者离开消费者组(例如,通过未能发送心跳或明确请求离开)
新消费者加入 ConsumerGroup
消费者更改其主题订阅
订阅主题的变化,例如分区的增加/减少。
在重新平衡期间,整个 ConsumerGroup 的消费将暂停,并且分配将根据您选择的策略再次进行。
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |