rocketmq存储消息mysql_消息中间件—RocketMQ消息存储(一)

本文深入介绍了RocketMQ消息存储的架构,包括其选择磁盘文件存储的原因、与其它存储方式的对比、消息存储的整体架构以及文件存储模型层次结构。RocketMQ采用混合型存储结构,有优点也有缺点,如随机读操作效率较低,但通过ConsumeQueue和IndexFile提高查询效率。RocketMQ利用PageCache和Mmap提高读写性能。
摘要由CSDN通过智能技术生成

文章摘要:MQ分布式消息队列大致流程在于消息的一发一收一存,本篇将为大家主要介绍下RocketMQ存储部分的架构

消息存储是MQ消息队列中最为复杂和最为重要的一部分,所以小编也就放在RocketMQ系列篇幅中最后一部分来进行阐述和介绍。本文先从目前几种比较常用的MQ消息队列存储方式出发,为大家介绍RocketMQ选择磁盘文件存储的原因。然后,本文分别从RocketMQ的消息存储整体架构和RocketMQ文件存储模型层次结构两方面进行深入分析介绍。使得大家读完本文后对RocketMQ消息存储部分有一个大致的了解和认识。

这里先回顾往期RocketMQ技术分享的篇幅(如果有童鞋没有读过之前的文章,建议先好好读下之前小编写的篇幅或者其他网上相关的博客,把RocketMQ消息发送和消费部分的流程先大致搞明白):

(1)消息中间件—RocketMQ的RPC通信(一)

(2)消息中间件—RocketMQ的RPC通信(二)

(3)消息中间件—RocketMQ消息发送

(4)消息中间件—RocketMQ消息消费(一)

(5)消息中间件—RocketMQ消息消费(二)(push模式实现)

(6)消息中间件—RocketMQ消息消费(三)(消息消费重试)

一、MQ消息队列的一般存储方式

当前业界几款主流的MQ消息队列采用的存储方式主要有以下三种方式:

(1)分布式KV存储:这类MQ一般会采用诸如levelDB、RocksDB和Redis来作为消息持久化的方式,由于分布式缓存的读写能力要优于DB,所以在对消息的读写能力要求都不是比较高的情况下,采用这种方式倒也不失为一种可以替代的设计方案。消息存储于分布式KV需要解决的问题在于如何保证MQ整体的可靠性?

(2)文件系统:目前业界较为常用的几款产品(RocketMQ/Kafka/RabbitMQ)均采用的是消息刷盘至所部署虚拟机/物理机的文件系统来做持久化(刷盘一般可以分为异步刷盘和同步刷盘两种模式)。小编认为,消息刷盘为消息存储提供了一种高效率、高可靠性和高性能的数据持久化方式。除非部署MQ机器本身或是本地磁盘挂了,否则一般是不会出现无法持久化的故障问题。

(3)关系型数据库DB:Apache下开源的另外一款MQ—ActiveMQ(默认采用的KahaDB做消息存储)可选用JDBC的方式来做消息持久化,通过简单的xml配置信息即可实现JDBC消息存储。由于,普通关系型数据库(如Mysql)在单表数据量达到千万级别的情况下,其IO读写性能往往会出现瓶颈。因此,如果要选型或者自研一款性能强劲、吞吐量大、消息堆积能力突出的MQ消息队列,那么小编并不推荐采用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值