共计 761 个字符,预计需要花费 2 分钟才能阅读完成。
消费者启动的时候,次要是初始化几个外围的组件。
反序列器,次要是生产者发送的音讯是序列化到 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。