截止本文书写时间,当前的kafka版本到了3.4,因此请注意你使用的版本。同时截至当前最新的kafka一共有四种消费者策略。
第一种叫做RangeAssignor
,也叫range范围分配,是kafka的默认消费者策略。对一个消费者组来说,消费方式是以分区总数除以消费者总数来决定,一般如果不能整除,往往是从头开始将剩余的分区分配。
第二种是RoundRobinAssignor
,也叫round轮训分配,说的是对于同一组消费者来说,使用轮训的方式来决定消费者消费的分区,既依次分配一个,直到分区被分配完毕。
第三种叫StickyAssignor
,是在0.11.x新增的,保证分配最大程度地平衡,同时保留尽可能多的现有分区分配。意思就是前面两个当同组内有新的消费者加入或者旧的消费者退出的时候,会从新开始决定消费者消费方式,但是Sticky在同组中有新的消费者加入或者旧的消费者退出时,不会直接开始重构分配策略,而是保留现有消费者消费策略,将退出的消费者所消费的分区平均分配给现有消费者,新增消费者同理,同其他现存消费者的消费策略中分离
第四种叫做CooperativeStickyAssignor
,它继承了StickyAssignor的逻辑,但允许重构分区策略。
不过后两种消费策略很少有厂商用,大家一般说消费策略只说两个,因为kafka本身是大数据领域中一个很重要的组件,而使用它时动态的增加与减少消费者这种需求发生的概率相当小,大家一般都是从计算开始到计算结束一直计算到底,不计算的时候就挣个关掉了。
如需最新的kafka架构信息,请查询它的官网–》kafka官网,比如下图中的消费者策略相关信息文档
上图截取自于3.4版本的kafka文档,如果大家使用的是之前的版本,可能没有CooperativeStickyAssignor