分区分配策略
一个消费组内有多个消费者,一个topic有多个patition,所以消费者和partition是多对多的关系,kafka默认有以下三种分区分配策略
1.RangeAssignor
按照消费者总数和分区总数整除得到一个跨度,然后将分区按照跨度进行平均分配,当订阅多个topic时,每个topic分别计算
例如消费者c0,c1
topic有2个,分区分别为:
t0p0,t0p1,t0p2
t1p0,t1p1,t1p2
分配过程:
(1)分配topic:t0
c0: t0p0,t0p1
c1:t0p2
(2)分配topic:t1
c0:t0p0,t0p1,t1p0,t1p1
c1:t0p2,t1p2
如上,分配可能导致不均衡
2.RoundRobinAssignor
每个主题以轮询的方式分配,上面的例子分配如下:
c0:t0p0,t0p2,t1p1
c1:t0p1,t1p0,t1p2
当每个消费者订阅的主题不一致时,可能导致分配不均
(3)StickyAssignor
从0.11.0开始新增的分配策略
a.分区的分配尽可能均匀
b.当出现重分配的时候,分配尽可能和上次分配保持一致,减少分区移动
当a和b冲突时,以a为主
(4)自定义分区分配策略
2.4.0之前实现PartitionAssignor接口,2.4.0之后实现ConsumerPartitionAssignor