【Kafka】消费者分区分配规则

RoundRobin strategy(轮询分区):

轮询分区策略是把所有 partition 和所有 consumer 线程都列出来,然后按照 hashcode 进行排序,最后通过轮询算法分配 partition 给消费线程。如果所有 consumer 实例的订阅是相同的,那么 partition 会均匀分布

注意:使用轮询分区策略必须满足两个条件
1、每个主题的消费者实例具有相同数量的流
2、每个消费者订阅的主题必须是相同的

什么时候会触发轮询分区策略呢?当出现以下几种情况时,kafka 会进行一次分区分配操作,也就是 kafka consumer 的 rebalance(再均衡)
1、同一个 consumer group 内新增了消费者
2、消费者离开当前所属的 consumer group,比如主动停机或者宕机
3、topic 新增了分区(也就是分区数量发生了变化)
4、消费者主动取消订阅topic

kafka consuemr 的 rebalance 机制规定了一个 consumer group 下的所有 consumer 如何达成一致来分配订阅 topic的每个分区。而具体如何执行分区策略,就是前面提到过的两种内置的分区策略。而 kafka 对于分配策略这块,提供了可插拔的实现方式, 也就是说,除了这两种之外,我们还可以创建自己的分配机制。可以通过继承 AbstractPartitionAssignor抽象类实现 assign来做到

Range strategy(范围分区):

Range 策略是对每个主题而言的,首先对同一个主题里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序,然后将 partitions 的个数除于消费者线程的总数来决定每个消费者线程消费几个分区,如果除不尽,那么前面几个消费者线程将会多消费一个分区

发布了82 篇原创文章 · 获赞 328 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_43733123/article/details/104979198