rocketmq消息存储原理

author author     2023-04-26     196

关键词:

参考技术A

消息存储 CommitLog

主要是为了提高消息消费的性能

消费队列ConsumeQueue(索引)内容

consumequeue文件夹的组织方式

具体存储路径

通过key或时间区间来查询消息

Broker是混合型存储结构

索引和数据分离的存储结构

生产者和消费者使用索引和数据相分离的存储结构
整体流程

1、Producer发送消息至Broker端
2、Broker端使用同步或者异步的方式对消息刷盘持久化
保存至CommitLog中
3、Consumer拉取消息
4、服务端也支持长轮询模式
Broker允许等待30s的时间
只要这段时间内有新消息到达
将直接返回给消费端
页缓存和内存映射 页缓存(PageCache)是OS对文件的缓存
用于加速对文件的读写

程序对文件进行顺序读写的速度几乎接近于内存的读写速度
主要原因就是由于OS使用PageCache机制对读写访问操作进行了性能优化
将一部分的内存用作PageCache

对于数据的写入
OS会先写入至Cache内
随后通过异步的方式由pdflush内核线程将Cache内的数据刷盘至物理磁盘上

消费队列的读性能几乎接近读内存的原因

在消息堆积的情况下也不会影响性能

消息存储的日志数据文件CommitLog的读取会严重影响性能

读取消息内容会产生较多的随机访问读取

如何提升随机读性能

传统的IO方式
用户态空间的进程要读写磁盘文件
需要经过内核空间
用户进程访问内核空间的缓存
如果没有的话 则读取磁盘文件
用户进程写入文件 先写入内核空间的socket缓存
再通过网卡写入到磁盘

经过2次DMA拷贝+2次CPU拷贝
4次上下文切换
RocketMQ mmap+write

mmap利用内存映射文件来避免拷贝

rocketmq采用mmap+write方式实现文件读写操作

sendfile

sendfile+DMA gather

1、用户进程通过sendfile()方法向操作系统发起调用
上下文从用户态转向内核态
2、DMA控制器利用scatter把数据从硬盘中拷贝到读缓冲区离散存储
3、CPU把读缓冲区中的文件描述符和数据长度发送到socket缓冲区
4、DMA控制器根据文件描述符和数据长度
使用scatter/gather把数据从内核缓冲区拷贝到网卡
5、sendfile()调用返回,上下文从内核态切换回用户态

DMA gather和sendfile一样数据对用户空间不可见
而且需要硬件支持
同时输入文件描述符只能是文件
但是过程中完全没有CPU拷贝过程
极大提升了性能

产生2次DMA拷贝
没有CPU拷贝
而且也只有2次上下文切换

rocketmq工作原理

1.消息的生产过程消息生产过程,经历如下过程:1.向NameServer发出获取消息Topic的路由信息的请求2.nameServer返回该Topic的路由表以及Broker列表3.Producer根据代码中指定的Queue选择策略,从Queue中选择一个队列,用于存储消息4.Producer对... 查看详情

精华推荐|深入浅出rocketmq原理及实战「性能原理挖掘系列」透彻剖析贯穿rocketmq的系统服务底层原理以及高性能存储设计挖掘深入(代码片段)

...的设计越复杂,采用文件系统作为消息存储的方式。RocketMQ存储机制消息中间件的存储一般都是利用磁盘,一般是使用机械硬盘,但机械硬盘的速度比访问内存慢了n个数量级,一款优秀的消息中间件必然会将硬件... 查看详情

rocketmq消息存储原理

参考技术A消息存储CommitLog主要是为了提高消息消费的性能消费队列ConsumeQueue(索引)内容consumequeue文件夹的组织方式具体存储路径通过key或时间区间来查询消息Broker是混合型存储结构索引和数据分离的存储结构生产者和消费者使用... 查看详情

深入浅出rocketmq原理及实战「底层原理挖掘系列」透彻剖析贯穿rocketmq的消息发送的全部流程和落盘原理分析指南(代码片段)

前言介绍RocketMQ目前在国内应该是比较流行的MQ了,目前本人也在公司的项目中进行使用和研究,借着这个机会,分析一下RocketMQ发送一条消息到存储一条消息的过程,这样会对以后大家分析和研究RocketMQ相关的问... 查看详情

精华推荐|深入浅出rocketmq原理及实战「底层原理挖掘系列」透彻剖析贯穿rocketmq的存储系统的实现原理和持久化机制

RocketMQ的发展历史RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日,阿里巴巴向广西党性培训Apache软件基金会捐赠RocketMQ,成为Apache孵化项目。2017年9月25日,Apache宣布Rock... 查看详情

rocketmq原理解析

参考技术ARocketMQ原理解析说明:NameServer是没有状态的,即NameServer中的Broker和topic等状态信息(通过其他角色上报获取)都是保存在内存中的,不会持久化存储(可通过配置实现),集群可以横向扩展。主要功能如下:a.接收Broker... 查看详情

精华推荐|深入浅出rocketmq原理及实战「底层原理挖掘系列」透彻剖析贯穿rocketmq的存储系统的实现原理和持久化机制

RocketMQ的发展历史RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日,阿里巴巴向广西党性培训Apache软件基金会捐赠RocketMQ,成为Apache孵化项目。2017年9月25日,A... 查看详情

通过这三个文件彻底搞懂rocketmq的存储原理

RocketMQ是阿里开发的一个高性能的消息队列,支持各种消息类型,而且支持事务消息,可以说是现在的很多系统中的香饽饽了,所以呢,怎么使用大家肯定是要学习的我们作为一个有梦想的程序员,在学习... 查看详情

rocketmq的基本的架构原理

参考技术A这么想RocketMQ单机可以扛下10万的并发,那么让多台机器一起来提供服务,让几十万甚至更多的请求分散到这部署的多台机器是不是就可以了,让每台机器承受的QPS不超过10万就好了。存储数据也是同样的道理,把这海... 查看详情

rocketmq原理学习--索引

 1、RocketMQ原理学习--RocketMQ源码运行 2、RocketMQ原理学习--RocketMQ整体架构窥探 3、RocketMQ原理学习--消息类型 4、RocketMQ原理学习--NameServer 5、RocketMQ原理学习---生产者普通消息发送 6、RocketMQ原理学习---生产者... 查看详情

rocketmq消息发送的全部流程和落盘原理分析(代码片段)

前言介绍RocketMQ目前在国内应该是比较流行的MQ了,目前本人也在公司的项目中进行使用和研究,借着这个机会,分析一下RocketMQ发送一条消息到存储一条消息的过程,这样会对以后大家分析和研究RocketMQ相关的问... 查看详情

消息中间件搬迁

...息队列作用:异步,解藕,峰值处理,可恢复,顺序,扩展性 RocketMq源码部分主要可以分为rocketmq-broker,rocketmq-client,rocketmq-common,rocketmq-filterSrv,rocketmq-namesrv和rocket 查看详情

再说rocketmq消息存储

rocketmq通过netty获取到消息请求后,直接掉处理模块,比如:SendMessageProcessor这个处理类主要负责处理客户端发送消息的请求。这个类实现了com.alibaba.rocketmq.remoting.netty.NettyRequestProcessor接口。这个接口下一共两个方法:RemotingCommand... 查看详情

rocketmq事务消息原理(代码片段)

一、RocketMQ事务消息原理:        RocketMQ在4.3版本之后实现了完整的事务消息,基于MQ的分布式事务方案,本质上是对本地消息表的一个封装,整体流程与本地消息表一致,唯一不同的就是将本地消息表存... 查看详情

分布式开放消息系统(rocketmq)的原理与实践

...,就回避不了两个问题:消息的顺序问题消息的重复问题RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ有哪些关键特性?其实现原理是怎样的?关键特性以及其实现原理一、... 查看详情

rocketmq源码学习--消息存储篇

1.序言今天来和大家探讨一下RocketMQ在消息存储方面所作出的努力,在介绍RocketMQ的存储模型之前,可以先探讨一下MQ的存储模型选择。2.MQ的存储模型选择个人看来,从MQ的类型来看,存储模型分两种:需要持久化(ActiveMQ,RabbitMQ,K... 查看详情

分布式开放消息系统(rocketmq)的原理与实践

...不了两个问题: 消息的顺序问题消息的重复问题 RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ有哪些关键特性?其实现原理是怎样的? 关键特性以及其实现原理&n... 查看详情

(转)rocketmq源码学习--消息存储篇

...tp://www.tuicool.com/articles/umQfMzA1.序言今天来和大家探讨一下RocketMQ在消息存储方面所作出的努力,在介绍RocketMQ的存储模型之前,可以先探讨一下MQ的存储模型选择。2.MQ的存储模型选择个人看来,从MQ的类型来看,存储模型分两种:... 查看详情