kafka学习八-消费者分区策略
kafka有两种分配策略,RoundRobin和Range(默认)
1 RoundRobin策略
1.1 订阅单个topic
这种方式下就是按照partition顺序,轮询分配给consumer,如下图
1.2 订阅多个topic
两个topic,t0和t1,各有3个分区,p0-p2
kafka中有个类,TopicAndPartition,把topic和partition排列组合成6个对象,计算出哈希值排序,然后依次轮询分配给各个consumer。
RoundRobin策略优点是消费者分区分配比较平均,最多差一个,但是有一个严重的问题,如果不同的消费者组订阅的主题不一样,则可能会消费到不该消费的数据。所以只有在各个消费者组订阅的主题一样的时候才能用该策略
2 Range策略
是按照单个主题来分的,分配模式如下图
这样的好处是不同的消费者组可以订阅不同的topic,不会出现消费数据不正确的问题。但是缺点就是可能会造成分区分配不均匀,有的多有的少。
3 分区分配策略触发场景
消费者个数发生变化的时候会触发
- 第一次启动消费者
- 消费者上线、下线