RocketMQ消息存储原理(上)

简介: RocketMQ消息存储原理(上)

消息存储


CommitLog

image.png

1、消息内容和元数据都会存在CommitLog日志文件中
2、消息内容不是定长的
3、单个文件大小默认1G
   文件名长度为20位 左边补零 剩余为起始偏移量
   比如第一个文件名是 00000000000000000000
   起始偏移量为0
   文件大小为1G=1073741824
   当第一个文件写满了
   第二个文件为00000000001073741824
   起始偏移量为1073741824


ConsumeQueue(消息消费队列)

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

image.png

消费者通过消息消费队列ConsumeQueue(作为索引)
来查找消费的消息

消费队列ConsumeQueue(索引)内容

image.png

ConsumeQueue(逻辑消费队列)
作为消费消息的索引
保存了指定Topic下的队列消息在CommitLog中的
起始物理偏移量offset(8个字节)
消息大小size和(4个字节)
消息Tag的HashCode值(8个字节)
每个条目定长20个字节
单个文件有30W个条目
可以像数组一样随机访问每个条目
每个ConsumeQueue文件大约5.72M

consumequeue文件夹的组织方式

topic/queue/file三层组织结构

具体存储路径

$HOME/store/consumequeue/{topic}/{queueId}/{fileName}


IndexFile(索引文件)

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

1、存储位置
$HOME \store\index${fileName}
2、文件名
以创建时的时间戳命名的
3、文件大小
单个文件约为400M
可以存储2000W个索引


存储结构


Broker是混合型存储结构

image.png

单个broker所有队列共用一个日志文件

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


image.png

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


整体流程


image.png

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


页缓存和内存映射


页缓存(PageCache)是OS对文件的缓存
用于加速对文件的读写

image.png

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

image.png





相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1天前
|
消息中间件 存储 数据库
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
88381 1
|
1天前
|
存储 消息中间件 缓存
RocketMQ 5.0 分级存储背后技术优化包含那几个方面
RocketMQ 5.0 分级存储背后的技术优化是一个综合性的系统工程,需要考虑多个方面,包括存储介质的选择、数据读写策略的设计、数据压缩和解压缩技术的引入、自动的数据分级和迁移机制的实现,以及高可用性和容错性的保证等。这些技术优化的目的是为了实现存储成本和性能的最优平衡,提高系统的可靠性和可用性,满足大规模数据处理的需求。
106 1
|
1天前
|
消息中间件 存储 运维
|
1天前
|
消息中间件 存储 安全
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
33 0
|
8月前
|
消息中间件 存储 网络协议
从原理到实战,手把手教你在项目中使用RabbitMQ
RabbitMQ 的文章之前写过,但是当时给的示例是 Demo 版的,这篇文章主要是结合之前写的理论知识,将 RabbitMQ 集成到技术派项目中。 话不多说,上文章目录: 下面我们先回顾一下理论知识,如果对这块知识已经清楚的同学,可以直接跳到实战部分。 1. 消息队列 1.1 消息队列模式 消息队列目前主要 2 种模式,分别为“点对点模式”和“发布/订阅模式”。 点对点模式 一个具体的消息只能由一个消费者消费,多个生产者可以向同一个消息队列发送消息,但是一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息。 需要额外注意的是,如果消费者
456 5
|
1天前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
55 1
|
1天前
|
消息中间件 存储 负载均衡
精华推荐 | 【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(上篇)
精华推荐 | 【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(上篇)
24 1
|
6月前
|
消息中间件 Kafka 测试技术
微服务轮子项目(33) -RocketMQ特点、安装部署、异常处理、事务消息原理
微服务轮子项目(33) -RocketMQ特点、安装部署、异常处理、事务消息原理
98 0
|
1天前
|
消息中间件 存储 数据库
深度剖析 RocketMQ 5.0,流存储:流场景的诉求是什么?
本文将从使用的角度出发,来更详细的展示一下流存储的场景,看看它和业务消息的场景有哪些区别。 RocketMQ 5.0 面向流存储的场景,提供了哪些特性。再结合两个数据集成的案例,来帮助大家了解流存储的用法。
3372 2
|
1天前
|
消息中间件 存储 Cloud Native
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程