Kakfa -- 消费者启动流程
消费者启动的时候,主要是初始化几个核心的组件。
反序列器,主要是生产者发送的消息是序列化到broker的,所以这边要反序列化进行处理。
NetworkClient之前在生产者已经讲过了,用于网络通讯。
ConsumerCoordinator是协调器,如果同一个group进行消费的时候,需要进行协调,这里和rocketmq不同,rocketmq是消费者自己来协调的(RocketMQ -- 写在消息拉取前),kafka是通过broker来协调。相同的是,消费者需要发送心跳给broker,broker才知道哪些消息费需要消费。
Fetcher主要是用来拉取消息的。
文章图片
Consumer在初始化后,就开始拉取消息,但是在拉取消息之前,还需要确定Coordinator。
在没有Coordinator的时候,不如consumer1,他会随机的找到broker的地址,比如broker1。
调用broker1的接口,请求相关数据。
【Kakfa -- 消费者启动流程】
文章图片
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。
文章图片
推荐阅读
- Android——活动的启动模式
- U盘启动盘恢复为普通U盘
- Spring Boot启动器详细介绍
- 投稿|消费者跟风、资本热捧,但“露营热”还是伪需求?
- 安卓活动的启动模式
- springboot基于maven多模块项目搭建(直接启动webApplication)
- 运行Appium服务时,启动不了WebDriverAgent的解决方法
- WPF APP 启动时增加特殊逻辑
- web.xml启动时加载详细解释
- 安卓四大组件之服务服务的生命周期和启动方式