kinnylee
图解RocketMQ消息发送和存储流程
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
kinnylee
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
图解RocketMQ消息发送和存储流程
图解RocketMQ消息发送和存储流程
kinnylee
关注
发布于 2020-10-15 10:15:07
2.9K
0
发布于 2020-10-15 10:15:07
举报
文章被收录于专栏:
kinnylee钻研技术
基本概念
参考
官网文档
整体架构
Producer:生产者
Consumer:消费者
Broker:负责消息存储、投递、查询
NameServer:路由注册中心。功能包括:Broker管理、路由信息管理
模块间数据流转
生产-消费模型
消息发送流程
Broker启动时,向NameServer注册信息
客户端调用producer发送消息时,会先从NameServer获取该topic的路由信息。消息头code为GET_ROUTEINFO_BY_TOPIC
从NameServer返回的路由信息,包括topic包含的队列列表和broker列表
Producer端根据查询策略,选出其中一个队列,用于后续存储消息
每条消息会生成一个唯一id,添加到消息的属性中。属性的key为UNIQ_KEY
对消息做一些特殊处理,比如:超过4M会对消息进行压缩
producer向Broker发送rpc请求,将消息保存到broker端。消息头的code为SEND_MESSAGE或SEND_MESSAGE_V2(配置文件设置了特殊标志)
消息存储流程
Broker端收到消息后,将消息原始信息保存在CommitLog文件对应的MappedFile中,然后异步刷新到磁盘
ReputMessageServie线程异步的将CommitLog中MappedFile中的消息保存到ConsumerQueue和IndexFile中
ConsumerQueue和IndexFile只是原始文件的索引信息
消息体结构
CommitLog的消息体长度不一样,每个CommitLog文件默认1G
ConsumerQueue内的消息体长度固定,为20Byte
内存映射流程
内存映射文件MappedFile通过AllocateMappedFileService创建
MappedFile的创建是典型的生产者-消费者模型
MappedFileQueue调用getLastMappedFile获取MappedFile时,将请求放入队列中
AllocateMappedFileService线程持续监听队列,队列有请求时,创建出MappedFile对象
最后将MappedFile对象预热,底层调用force方法和mlock方法
刷盘流程
producer发送给broker的消息保存在MappedFile中,然后通过刷盘机制同步到磁盘中
刷盘分为同步刷盘和异步刷盘
异步刷盘后台线程按一定时间间隔执行
同步刷盘也是生产者-消费者模型。broker保存消息到MappedFile后,创建GroupCommitRequest请求放入列表,并阻塞等待。后台线程从列表中获取请求并刷新磁盘,成功刷盘后通知等待线程。
本文参与
腾讯云自媒体同步曝光计划
,分享自作者个人站点/博客。
如有侵权请联系
cloudcommunity@tencent.com
删除
前往查看
存储
编程算法
本文分享自
作者个人站点/博客
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
存储
编程算法
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
目录
基本概念
整体架构
模块间数据流转
生产-消费模型
消息发送流程
消息存储流程
消息体结构
内存映射流程
刷盘流程
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
产品介绍
产品文档
对象存储COS新用户低至1元!
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐