RocketMQ高级功能-消息存储篇

一、看前提问:

二、消息存储:

  1. 原理图解:
    在这里插入图片描述
    2.存储介质:
    物理文件进行持久化存储
    3.顺序存储:
    RocketMQ的消息⽤顺序写保证了消息存储的速度。
    4.消息存储结构:
    消息存储是consumerqueue和commitlog配合存储完成的
    commitlog:真正存储消息的物理文件(${store}/commitlog)
    consumerqueue:消息的逻辑队列,存储的是物理存储的地址类似索引。
    consumerqueue:topic下每个messagequeue都有对应的consumerqueue文件,也是存在物理文件中路径为:…/consumequeue/{topicName}/{queueid}/fileNameBroker
    mappedFile⽂件⽣成逻辑:
    commitlog内部的数据结构,核心部分就是mappedFile(102410241024=1G/每个mappedFile),每个mappedFile生成逻辑都是名字长度为20左边补0,例如第一个为00000000000000000000,顺序读写满了第二个就是000000001073741824,具体可查询源码:
MessageStoreConfig类中mappedFileSizeCommitLog属性
MappedFileQueue类中getLastMappedFile方法

存储结构图:
在这里插入图片描述
commitlog与offset:
在这里插入图片描述
indexfile:
提供通过key或时间区间来查询消息的方法,文件的存储路径为: …\store\index${fileName},⽂件名fileName是以创建时的时间戳命名的,固定的单个IndexFile⽂件⼤⼩约为400M,⼀个IndexFile可以保存 2000W个索引,IndexFile的底层存储设计为在⽂件系统中实现HashMap结构,故rocketmq的索引⽂件其底层实现为hash索引
清理机制:

  • 按时间清理:默认清理3天前的commitlog
  • 按磁盘水位:磁盘容量达到75%开始清理最老的commitlog文件
    零拷贝
    这是查询高效的原因
    刷盘机制:
    同步刷盘:
    在这里插入图片描述
    优点:可靠性高、安全性高
    缺点:性能低
    异步刷盘:
    在这里插入图片描述
    优点:效率高,吞吐量大
    缺点:可靠性不能保证
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值