rocketMq源码
wb_snail
这个作者很懒,什么都没留下…
展开
-
rocketMq存储模型_indexFile
index文件的作用我们在rocketMq存储模型_概述一文中已经说过,是为了满足根据msgId以及消息key查询消息的需求,每个Broker对应一组indexFile,最大大小为40+5000000*4+5000000 * 4*20byte(为啥要这样算,下文会说明),写完后继续写下一个上一篇文章讲述了consumequeue这类索引文件的结构及读写过程,因为consumequeue以一个单调递增的int数字为索引,所以其结构非常简单,今天要讲的另一类索引文件index(下文简称indexFile原创 2020-05-20 16:45:20 · 2651 阅读 · 1 评论 -
rocketMq存储模型_consumeQueue
在前面的文章中,已经说过RocketMq中一个topic对应了多个queue,生产者发送的消息会默认以轮询的方式发到不同的queue中,对应到文件系统中,就是一个topic下的多组consumequeue文件通过上一篇文章,你应该已经知道了,消息正文存在commitLog中,consumequeue文件中存的是索引,索引的key为消费位点,内容为消息在commitLog中的位置信息。consumequeue文件的结构非常简单,就是由30万个固定大小为20byte的的数据块组成,数据块的内容如下:原创 2020-05-20 15:09:55 · 1158 阅读 · 1 评论 -
rocketMq存储模型_概述
现代的消息队列的主要责任就是存储消息和查询消息,本质上,它们都是分布式存储系统。一个存储系统的性能好坏,最主要的决定因素就是它的存储模型。所有的存储系统中,消息队列的存储可以算是很简单的了,因为消息没有修改的需求,这就使得通过简单的追加写就可以完成消息存储,而如果数据需求修改,就会导致随机读写,并且在随机写的过程中,可能会引起磁盘内容移动,产生磁盘碎片。相对来说,如果只需要追加写,在设计上要少去大量的工作,确实是很幸福的RocketMq在设计上也是遵循了消息文件+索引文件的方式,下面分别看看有哪些类型的原创 2020-05-20 13:21:01 · 1033 阅读 · 0 评论 -
RocketMq消费失败处理逻辑
rocketMq消费者消费一条消息后,需要回复broker消息的消费状态,consume_success表示消费成功,reconsume_later表示稍后重新消费,如果消费者消费失败,应该返回一个reconsume_later,本文只讨论返回reconsume_later的情况我们以topic=topic_1,groupId=CID_1为例,讲述该消费者消费一条消息,并返回reconsu...原创 2020-05-07 20:53:38 · 4523 阅读 · 0 评论 -
rocketMq架构概述
首先来一张网上的rocketMq架构图,让大家直观感受下:下面我们就这张架构图上的几个主要角色进行介绍: namesrv集群:负责接受broker注册的路由信息,并为producer和consumer提供路由查询服务 1).路由信息包括了broker自身的一些信息,如IP地址,brokerId,brokerName,broker所属集群...原创 2019-04-11 15:06:20 · 1306 阅读 · 0 评论 -
rocketMq原理_nameserver与broker的交互
本文从namesrv与broker的交互角度,讲述namesrv的具体作用,以及与broker的关系:broker启动时,需要指定namesrv地址(一个或多个),在建立好与所有namesrv的连接后,broker的一个重要任务就是向这些namesrv注册路由信息: namesrv在内存中维护了下面几个数据结构,用于保存broker注册的有关数据,这些数据统称为路由信息,路...原创 2019-04-11 16:49:43 · 7457 阅读 · 2 评论 -
rocketMq原理_客户端与namesrv及broker的交互
对于rocketMq客户端来说,无非就两个任务,消息生产与消息消费 对于生产者来说,需要知道消息可以往哪个或者哪些目的地发送 对于消费者来说,需要知道可以从哪个或者哪些目的地拉取到消息本文会从客户端与namesrv、broker的交互的角度讲述消息生产与消息消费大致原理,当然,重点还是围绕上文中提出的queue进行讲述:客户端包括生产者与消费者,它们有共同的...原创 2019-04-12 14:30:35 · 3467 阅读 · 3 评论 -
rocketMq事务消息原理与二阶段提交
1.producer发送半消息给broker2.broker存储半消息,半消息存储逻辑与普通消息一致,只是属性有所不同,topic是固定写死的,queueId也是固定为0,会将实际topic和queueId设置到消息的properties中一并存储。然后返回producer存储成功信息,包含了事务ID等信息3.如果broker返回存储成功,producer执行本地事务(事务消息必须重写的方...原创 2019-04-12 14:45:16 · 3235 阅读 · 0 评论 -
消息拉取长轮询,rocketMq是怎么玩的
一般轮询: 在涉及到远程信息查询时,一般最简单粗暴的做法就是客户端开启定时任务,不断请求服务端是否有新的信息到达。这样做有几个明显的弊端: 如果查询频率比信息产生频率高,就会浪费网络资源,还会对服务端造成不必要的查询开销,当客户端数量较大时,服务端负载较高 如果频率过低,从新的信息产生到客户端拿到会有一定延迟长轮...原创 2019-04-13 10:00:52 · 1972 阅读 · 1 评论