Kakfa -- 消费者启动流程

消费者启动的时候,主要是初始化几个核心的组件。

反序列器,主要是生产者发送的消息是序列化到broker的,所以这边要反序列化进行处理。

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

ConsumerCoordinator是协调器,如果同一个group进行消费的时候,需要进行协调,这里和rocketmq不同,rocketmq是消费者自己来协调的(RocketMQ -- 写在消息拉取前),kafka是通过broker来协调。相同的是,消费者需要发送心跳给broker,broker才知道哪些消息费需要消费。

Fetcher主要是用来拉取消息的。

Kakfa -- 消费者启动流程_第1张图片

Consumer在初始化后,就开始拉取消息,但是在拉取消息之前,还需要确定Coordinator。

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

调用broker1的接口,请求相关数据。

Kakfa -- 消费者启动流程_第2张图片

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

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

Kakfa -- 消费者启动流程_第3张图片

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

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

Kakfa -- 消费者启动流程_第4张图片

broker2就会把相关consumer信息进行保存,并选择leader consumer。

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

Kakfa -- 消费者启动流程_第5张图片

你可能感兴趣的:(kafka消息队列消息中间件)