RocketMQ源码分析之消息写入.docx
《RocketMQ源码分析之消息写入.docx》由会员分享,可在线阅读,更多相关《RocketMQ源码分析之消息写入.docx(42页珍藏版)》请在第一文库网上搜索。
1、RocketMQ源码分析之消息写入ROCketMQ是阿里巴巴开源的分布式消息中间件,它具有低延迟、高性能、高可靠性、万亿级容量和灵活的扩展性。本篇文章介绍了其存储文件和存储整体架构,并从源码角度分析了消息写入流程以及消息刷盘。1. RocketMQ存储文件Rocketmq存储路径为$ROCKETIoME/store,主要存储以下文件: Commit1og消息存储目录 Consumequeue消息消费队列存储目录 index消息索引文件存储目录checkpoint文件检查点,存储COmmit1og、ConSUmeqUeUe和index文件最后一次刷盘时间戳 abort如果abort文件存储则表示
2、broker非正常关闭,否则表示broker正常关闭。该文件是在broker启动的过程中创建的。 configbroker运行期间一些配置信息,主要包含以下信息: ConsumerFi1ter.json该文件保存的是每个topic中消息的过滤逻辑 ConsumerOffset.json该文件保存的是每个COnSUnIergroup的消费进度 de1ayffset.json该文件保存的是延迟消息队列拉取进展 SubscriptionGroup.json该文件保存的是每个消费者的订阅信息 topics,json该文件保存的是topic的配置信息2.RocketMQ消息存储整体架构消息存储架构图中有
3、三个与消息存储相关的文件,分别是COiTimit1og.Consumequeue和index0RocketMQ通过使用内存映射文件来提高IO访问性能,无论是COmmit1og、COnSUnIeqUeUe还是index,单个文件都被设计为固定长度,如果一个文件写满以后再创建一个新文件。COnImitIog和COnSUnIeqUeUe的文件名称是该文件第一条消息对应的全局物理偏移量,index的文件名称是以创建文件的时间戳命名。在ROCketMQ中所有topic的消息都存储在同一个文件中,这样就确保了发送时顺序写文件及消息发送的高性能和高吞吐量。但是RocketMQ是基于topic的消息订阅机制,
4、这样便给消息消费以及消息检索带来了极大的不便。为了提高COnSUmer消费消息的效率,RoCketMQ引入了Consumequeue,ConSUmeqUeUe文件组织方式是$R0CKETJI0ME/store/consumequeue/topic名称/queueid/,它记录的是消息的COmmitIogOffset、消息大小和taghashcode为了提高消息检索的功能,ROCketMQ中引入了index文件,其hash冲突设计理念借鉴了JaVa中HaShMaP的结构。index文件包含三个部分:IndeXHeader、HaSh槽和IndeX条目,其中IndeXHeader记录了index中包
5、含消息的最大及最小存储时间、最大及最小物理偏移量、hashS1ot个数、index条目列表当前已使用的个数,IndeX条目记录的是消息key的hashcode、消息的COmmit1ogoffset、消息与第一条消息的时间戳差值及该条目的前一条目的index索引。(注意:根据keyhashcode定位hash槽可能会引发hash冲突,index文件为了解决hash冲突其解决方法是每个hash槽存储的是落在这个槽的hashcode最新的index的索引,新的index条目的最后四个字节存储该槽上一个条目的index的下标。)消息存储架构图可以简化为以下流程: producer发送消息到broker
6、 broker采用同步或者异步方式将消息刷盘持久化 broker的master和SIaVe之间数据同步 broker后台服务线程ReputMessageService分发请求构建Consumequeue和index文件本篇文章我们一起先来看下消息的写入流程。3 .MappedFi1e与MappedFi1eQueue在RocketMQ中使用MappedFi1e和MappedFi1eQueue来封装存储文件,MappedFi1e是RocketMQ内存映射文件的具体实现,MappedFi1eQueue是MaPPedFi1e的管理容器,MaPPedFiIeQUeUe是对存储目录的封装。下图可以表示出两
7、者的关系:MappedFi1e重要属性如下所示:MappedFi1eQueue重要属性如下所示:4 .消息写入4.1 消息写入流程消息写入的整体流程如下图所示:Commi11OgftputMessage流程如下图所示:下面我们详细分析写入流程中几个比较重要的方法: get1astMappedFiIe(fina11ongStartOffset,boo1eanneedCreate) appendMessagesInner(fina1MessageExtmessageExt,fina1AppendMessageCa1IbackCb)及CIOAPPenC1(fina11ongfiIeFromOffse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RocketMQ 源码 分析 消息 写入