RocketMQ消息存储

RocketMQ主要存储文件包含消息文件(commitLog)、消息消费队列文件(consume-queue)、Hash索引文件(IndexFile)、检测点文件(checkpoint)、abort(关闭异常文件)、单个消息存储文件、消息消费队列文件、Hash索引文件长度固定以便使用内存映射机制进行文件的读写操作。RocketMQ组织文件以文件的起始偏移量来命名文件,这样根据偏移量能快速的定位到真实的物理文件。RocketMQ基于内存映射文件机制提供了同步刷盘与异步刷盘两种机制,异步刷盘是指在消息存储时先追加到内存映射文件,然后启动专门的刷盘线程定时将内存中的数据刷盘到磁盘。

commitLog,消息存储文件,RocketMQ为了保证消息发送的高吞吐量,采用单一文件存储所有主题的消息,保证消息存储是完全的顺序写,但这也给文件读取带来了不便,RocketMQ为了方便消息消费构建了消息消费队列文件,基于主题与队列进行组织,同时RocketMQ为消息实现了Hash索引,可以为消息设置索引键,根据索引能够快速从commitLog文件中检索出消息。

当消息到达CommitLog文件后,会通过RequestMessageService线程接近实时的将消息转发给消息消费队列文件好索引文件,为了安全起见,RocketMQ引入了abort文件,记录Broker的停机是正常关闭还是异常关闭,在重启Broker时为了保证CommitLog文件,消息消费队列文件与Hash索引文件的正确性,分别采取不同的策略来恢复文件。

RocketMQ不会永久存储消息文件、消息消费队列文件,而是启用文件过期机制,并在磁盘空间不足或默认在凌晨四点删除过期文件,文件默认保存72小时并且在删除文件时并不会判断该消息文件上的消息是否被消费

一、消息发送存储流程:

RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件,尽最大的能力确保消息发送的高性能与高吞吐量。因为基于消费主题进行订阅消费,所以为了提高消费效率,引入了消息消费队列文件,每个消息主题包含多个消息消费队列,每一个消息队列有一个消息文件。IndexFile索引文件为了加速消息的检索性能,根据消息的属性快速的从CommitLog中检索出来,

  • CommitLog:消息存储文件,所有消费主题的消息都存储在CommitLog文件中。
  • ConsumeQueue:消息消费队列,消息到达CommitLog文件后,将异步转发到消息消费队列,供消息消费者消费。
  • IndexFile:消息索引文件,主要存储消息Key 与 Offset的对应关系。
  • 事务状态服务:存储每条消息的事务状态。
  • 定时消息服务:每一个延迟级别对应一个消息消费队列,存储延迟队列的消息拉取进度。

1、如果当前Broker停止工作或者Broker为Slave角色或当前Rocket不支持写入则拒绝消息写入,如果消息主题长度超过256个字符,消息属性长度超过65536个字符将拒绝该消息写入。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值