Edehuag

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

RocketMQ之消息存储技术

消息存储概述

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

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

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

存储介质类型和对比

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

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

消息存储技术

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

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

顺序读写和随机读写

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

顺序读写 随机读写
文件数目 读写一个大文件
比较 顺序读写只读写一个大文件,耗时更少
文件预读 顺序读写时磁盘会预读文件,即在读取的起始地址连续读取多个页面,若被预读的页面被使用,则无需再去读取
比较 在大并发的情况下,磁盘预读能够免去大量的读操作,处理速度肯定更快
写入数据 写入新文件时,只需要寻找磁盘可用空间
比较 顺序读写创建新文件,只需要创建一个大文件就可以用很久

读写速度

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

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

1、顺序读写是对一个大文件,随机读写是多个小文件
2、顺序读写可以充分利用缓存机制,随机读写缓存使用率低
3、随机读写会造成硬盘频繁的寻址,造成读写效率降低

posted on   饿得慌~  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示