kafka消费者分区策略

Posted by Clear Blog on May 20, 2018

kafka中分区分配策略。 kafka官方提供了三种策略,当然我们也可以自定义分区策略, 这里我简单介绍下官方提供的三种策略。

  1. RangeAssignor 文字描述有点难理解,按照消费者和分区数来获得一个跨度, 然后将分区按照跨度进行平均分配,以保证分区尽可能均匀的分配给所有消费者。

公式:n=分区数/消费者数,m=分区数%消费者数,前m个消费者每个分配n+1个分区,后面的消费者每个分配n个分区。

举例说明,c0,c1两个消费者,t0,t1两个topic,都有4个分区t0p0,t0p1,t0p2,t0p3和t1p0,t1p1,t1p2,t1p3。 按照RangeAssignor分配的结果为 c0:t0p0,t0p1,t1p0,t1p1 c1:t0p2,t0p3,t1p2,t1p3

但是如果每个topic只有3个分区,即t0p0,t0p1,t0p2和t1p0,t1p1,t1p2。 那么分配的结果为 c0:t0p0,t0p1,t1p0,t1p1 c1:t0p2,t1p2

这样就导致c0消费者过载。

  1. RoundRobinAssignor 该策略很好理解,就是轮训依次分配给每个消费者。拿上面的例子来演示, c0:t0p0,t0p2,t1p1 c1:t0p1,t1p0,t1p2 但是如果消费者订阅topic数量不一,c0订阅了t0,c1订阅了t0和t1,那么分配结果如下 c0:t0p0,t0p2 c1:t0p1,t1p0,t1p1,t1p2

  2. StickyAssignor 该策略字面上很好理解,其功能也很好理解, 就是讲分区分配的尽可能与上次分配的保持相同,分配的具有粘性。