消费者启动的时候,次要是初始化几个外围的组件。

反序列器,次要是生产者发送的音讯是序列化到broker的,所以这边要反序列化进行解决。

NetworkClient之前在生产者曾经讲过了,用于网络通讯。

ConsumerCoordinator是协调器,如果同一个group进行生产的时候,须要进行协调,这里和rocketmq不同,rocketmq是消费者本人来协调的(RocketMQ -- 写在音讯拉取前),kafka是通过broker来协调。雷同的是,消费者须要发送心跳给broker,broker才晓得哪些音讯费须要生产。

Fetcher次要是用来拉取音讯的。

Consumer在初始化后,就开始拉取音讯,然而在拉取音讯之前,还须要确定Coordinator。

在没有Coordinator的时候,不如consumer1,他会随机的找到broker的地址,比方broker1。

调用broker1的接口,申请相干数据。

broker1接管到申请后,就会对groupid进行hash,并依据__consumer_offsets的topic数据进行取模,__consumer_offsets数量为50。

假如hash的值是10,而__consumer_offsets的partition为10在broker2上,那这个broker2就是Coordinator服务器。

consumer1晓得broker2是Coordinator服务器后,就开始向broker2进行注册并发送心跳。

同理,consumer2因为groupid是一样的,所以计算结果也是broker2,最终也向broker2进行注册并发送心跳。

broker2就会把相干consumer信息进行保留,并抉择leader consumer。

谁先注册上来,谁就是leader consumer。