Kafka消费者分区分配策略

原文链接: https://my.oschina.net/dreamness/blog/3094161

当有多个消费者和多个分区时, 该如何分配它们?配置项partition.assignment.strategy决定了分配策略。

range (默认)


配置为org.apache.kafka.clients.consumer.RangeAssignor
对于每一个Topic, 计算PartitionNum/ConsumerNum, 结果为每个消费者所分配的分区数, 若有余数, 则前几个消费者会多一个分区。

比如有连个消费者c0和c1, 两个topic:t0和t1,每个Topic有3个Partition:p1,p2,p3, 那么分配结果为:
c0: t0p0,t0p1,t1p0,t1p1
c1: t0p2,t1p2

缺点也很明显, 当有多个Topic时, 不能做到很好的平均分配, 前面的consumer会被分配到更多的Partition

range robin


配置为org.apache.kafka.clients.consumer.RoundRobinAssignor

采用轮询的方式, 当所有Topic的Partition数相同时, 可以平均分配。
但是如果多个Topic的Partition数不相同时, 可能会导致分配极不平均。

转载于:https://my.oschina.net/dreamness/blog/3094161

你可能感兴趣的:(Kafka消费者分区分配策略)