问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

RocketMQ消息存储技术深度解析:顺序读写与随机读写的性能对比

创作时间:
作者:
@小白创作中心

RocketMQ消息存储技术深度解析:顺序读写与随机读写的性能对比

引用
1
来源
1.
https://www.cnblogs.com/Eduhg/p/18733333

RocketMQ作为一款高性能的消息队列中间件,其消息存储技术备受关注。本文深入探讨了RocketMQ采用的文件存储机制,并对比了不同存储方式的性能、可靠性和开发难度。同时,文章详细解释了顺序读写和随机读写对磁盘性能的影响,为理解分布式队列的存储技术提供了有价值的参考。

消息存储概述

分布式队列因为有高可靠性的要求,所以数据要进行持久化存储,RocketMQ采用的是类似于Kafka的文件存储机制,即直接用磁盘文件来保存消息,而不需要借助MySQL这一类索引工具。

目前的MQ中间件从存储模型来,分为需要持久化和不需要持久化的两种模型,现在大多数的是支持持久化存储的,比如ActiveMQ、RabbitMQ、Kafka、RocketMQ等,而ZeroMQ却不支持持久化存储。业务系统也大多需要MQ有持久存储的能力,这样可以大大增加系统的高可用性。

从存储方式和效率来看,文件系统高于KV存储,KV存储又高于关系型数据库,直接操作文件系统肯定是最快的。如果从使用复杂性的角度出发,直接操作文件系统是最复杂的,关系型数据库的复杂度最低。从可靠性的角度来分析,文件系统高于KV存储,KV存储高于关系型数据库。

存储介质类型和对比

存储方式
简介
性能
可靠性
项目使用
关系型数据库存储
选用 JDBC 方式实现消息持久化,只需要简单地配置 xml 即可实现 JDBC 消息存储
存在性能瓶颈,如mysql在单表数据量达到千万级别的情况下,IO读写性能下降
该方案十分依赖DB,一旦DB出现故障,MQ消息无法落盘存储,从而导致线上故障
ActiveMQ
分布式KV存储
kv存储即 Key-Value 型存储中间件,如 Redis 和 RocksDB,将消息存储到这些中间件中
通过高并发的中间件存储和处理消息,速度必然优于数据库存储方式
KV存储一般是分布式部署,可靠性要高于DB
Redis、RockDB
文件系统存储
直接用磁盘文件来保存消息
直接操作文件系统肯定是最快的
文件系统高于KV存储
RocketMQ

存储效率:文件系统 > 分布式KV存储 > 关系型数据库DB

**开发难度和集成:文件系统> 分布式KV存储 > 关系型数据库DB **

消息存储技术

目前的高性能磁盘顺序写速度可以达到 600MB/s,足以满足一般网卡的传输速度,而磁盘随机读写的速度只有约 100KB/s,与顺序写的性能相差了 6000 倍,故好的消息队列系统都会采用顺序写的方式

注意:这里的600MB/s是大写B,相比小写b要快8倍

顺序读写和随机读写

顺序读写和随机读写对于机械硬盘来说为什么性能差异巨大

特征
顺序读写
随机读写
文件数目
读写一个大文件
多个小文件
文件预读
顺序读写时磁盘会预读文件,即在读取的起始地址连续读取多个页面,若被预读的页面被使用,则无需再去读取
无法利用预读机制
写入数据
写入新文件时,只需要寻找磁盘可用空间
需要频繁寻址

读写速度

目前的高性能磁盘,顺序写速度可以达到600MB/s, 超过一般网卡传输速度,但是磁盘随机写速度只有大概100KB/s,RocketMQ的消息用顺序写保证了消息存储的速度

顺序读写与随机读写区别总结

  1. 顺序读写是对一个大文件,随机读写是多个小文件
  2. 顺序读写可以充分利用缓存机制,随机读写缓存使用率低
  3. 随机读写会造成硬盘频繁的寻址,造成读写效率降低
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号