分区分配策略:(当消费者组中的消费者增多或减少会触发分区分配策略)
一个consumer group中有多个consumer,一个topic有多个partition,所以必然会涉及到partition
的分配问题,及确定那个partition由哪个consumer来消费。
kafka中有两种分配策略,一是RoundRobin,一是Range(默认):
RoundRObin是轮询分配给消费者:
假如:(1)topic的名字为topicA,有三个分区0,1,2,一个consumer gourp中有两个consumer分别是A,B那么这时候分配规则:A , topicA-0和topicA-2; B,topicA-1;轮询的方式进行的。
(2)topic的名字为topicB,topicA,分别有三个分区0,1,2,一个consumer gourp中有两个consumer分别是A,B那么这时候分配规则A订阅topicA,B订阅topicB(其实就是组订阅了topicA和B,这个是针对组进行订阅的):这时会根据topicAndPartition对象将分区进行重新处理,根据hash值将这两个的主题重新分配,分配为六个对象,在把这六个对象进行轮询给到组内的两个消费者。这个是针对组的。(RoundRobin分配策略)
Range分配策略(针对topic进行分配的):
(1)topic的名字为topicA,有三个分区0,1,2,一个consumer gourp中有两个consumer分别是A,B那么这时候分配规则:A,topic-0和topic-1;B,topic-2。不是轮询分配。
(2)topic的名字为topicB,topicA,分别有三个分区0,1,2,一个consumer gourp中有两个consumer分别是A,B那么这时候分配规则组订阅topicA和topicB,这样A对应的就是topicA-0,topicA-1,topicB-0,topicB-1;B对应的就是topicA-2和topicB-2。