rocketmq源码-consumer已消费offset更新逻辑

本文详细探讨了RocketMQ中消费者消费offset的更新逻辑,包括消费者如何将offset存储到内存,通过定时任务发送更新请求到Broker,Broker如何处理这些请求并同步到内存及磁盘。着重讲解了offset在内存和磁盘间的同步过程。
摘要由CSDN通过智能技术生成

前言

这篇博客,主要记录consumer已经消费的offset是如何更新的

对于集群模式,offset是维护在broker中的;而广播模式,offset是存储在本地文件中(暂时没有验证具体存储的位置,是根据源码推测的)

不管是pull模式,还是push模式,都需要维护consumer当前已经消费的offset
更新offset的逻辑,大致是这样的:
1.client从broker拉取消息
2.然后client回调业务系统的消费者所注册的messageListener,对消息进行处理
3.在处理完消息之后,会先将offset更新到client的内存中,需要注意的是:我这里说的client,并不是业务系统的消费者,而是rocketmq框架中的consumer
4.consumer在启动的时候,会启动一个异步线程,去定时的获取consumer内存中每个messageQueue的offset,然后通过发送netty请求到broker去处理
5.broker在接收到客户端的更新offset的请求之后,会把client发送过来的offset,更新到内存中,在内存中,也是通过一个map集合来存储
6.broker在启动的时候,也会启动一个异步定时的线程,定时的去拉取内存中的offset数据,然后持久化到磁盘文件上,consumerOffset.json

这上面的第一步,第二步是拉取消息的逻辑,在前面的博客中,也有介绍过,这里就不做过多的介绍

client更新offset到内存中

这是上面第三点的逻辑

org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService.ConsumeRequest#run

这个run方法,是将拉取到的消息,解析之后,依次回调业务系统中的消费者所注册的messageListener方法

在这里插入图片描述

在回调完之后,会接着进行其他逻辑的处理,其中,有一步很重要的操作:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值