前言
之前的一篇博客写的是Kafka基础了解一下(附上超链接,可以点进去看看)对Kafka简单介绍了一下。既然我们知道消费者组会协调去消费Topic下的partition,那么它是如何去协调的,是不是也要去了解了解。
简介
Kafka的分区实际上继承了一个接口AbstractPartitionAssignor,而这个接口下有两个实现的类,实现了RoundRobinAssignor和RangeAssignor两种算法。
RoundRobinAssignor
RoundRobin是轮询算法,它会将所有的TopicPartition统一进行分配。如下面的图一样,第一个partition给到consumer1,第二个Partition给到consumer2,以此类推,循环着依次分配。
RangeAssignor
它与前面那个算法不同的是,它是针对每一个Topic单独进行分配。就像下图一样,它会针对每一个Topic下的Partition数量与Consumer来进行划分。
这里我们将Topic下的Partition数量记为p,消费者组里的消费者数量记为c。
(1)p/c求出每个消费者最少可以得到多少个分区,例如这里的Topic01为3, 3/2=