美文网首页
RocketMQ学习之发送消息的存储设计实现

RocketMQ学习之发送消息的存储设计实现

作者: 先生zeng | 来源:发表于2020-08-15 15:49 被阅读0次

    今天继续来分享,关于RocketMQ的在发送消息是broker是如何进行存储持久化的。从目前的MQ中间件来说,可以分为需要持久化类型和不需要持久化类型,现在大多数都是需要使用持久化类型的,比如ActiveMQ、RabbitMQ、Kafka等,大多数业务系统都要求需要支持持久化存储,来增加系统的高可用性。

    另外从存储方式和效率来看,文件系统>KV存储>关系型数据库存储,直接操作文件系统是最快的,但是可靠性最低,而关系型数据库反而可靠性高。

    关于存储的一些设计概要

    RocketMQ用于存储设计了几个文件的概念包括Comitlog文件、ConsumeQueue文件、Index文件。他讲所有主题的消息存储在同一个文件,可以确保消息发送时,顺序的写文件,确保消息发送的性能跟高吞吐量。

    一般我们消息回根据消息主题来检索消息,这样的话对RocketMQ设计来说,效率不高,为此又引入了一个ConsumeQueue文件,每个消息主题回包来多个消息消费队列,每个消息队列有一个消息文件这样。数据在comitLog中时,会异步转发到消息消费队列。

    IndexFile,主要的设计也是为了加速消息的检索性能,会根据消息的属性来快速从comitLog中找出消息。主要存储消息key与Offset的对应关系。

    下面看一下数据的流向图:


    image.png

    消息存储实现类:org.apache.rocketmq.store.DefaultMessageStore

    二、消息存储发送流程

    相关文章

      网友评论

          本文标题:RocketMQ学习之发送消息的存储设计实现

          本文链接:https://www.haomeiwen.com/subject/odkadktx.html