kafka学习八-消费者分区策略

kafka有两种分配策略,RoundRobin和Range(默认)

1 RoundRobin策略

1.1 订阅单个topic

这种方式下就是按照partition顺序,轮询分配给consumer,如下图

kafka学习八-消费者分区策略

1.2 订阅多个topic

两个topic,t0和t1,各有3个分区,p0-p2
kafka中有个类,TopicAndPartition,把topic和partition排列组合成6个对象,计算出哈希值排序,然后依次轮询分配给各个consumer。
RoundRobin策略优点是消费者分区分配比较平均,最多差一个,但是有一个严重的问题,如果不同的消费者组订阅的主题不一样,则可能会消费到不该消费的数据。所以只有在各个消费者组订阅的主题一样的时候才能用该策略

2 Range策略

是按照单个主题来分的,分配模式如下图

kafka学习八-消费者分区策略


这样的好处是不同的消费者组可以订阅不同的topic,不会出现消费数据不正确的问题。但是缺点就是可能会造成分区分配不均匀,有的多有的少。

3 分区分配策略触发场景

消费者个数发生变化的时候会触发

  • 第一次启动消费者
  • 消费者上线、下线