RocketMQ存储层原理

RocketMQ通过元数据管理优化订阅组消费进度,采用顺序写盘提高存储效率,使用MappedByteBuffer减少数据拷贝。消息存储包括消息元数据和payload,通过独占锁保证顺序写入,提供同步和异步持久化机制。读写分离利用DirectByteBuffer提升性能,但可能降低数据可靠性。故障恢复策略包括快速失败和预分配文件。索引数据管理涉及客户端拉取流程,确保消息检索效率。
摘要由CSDN通过智能技术生成

元数据管理与优化

topic对应多个逻辑分区(Partition),称为队列(MessageQueue)

 

其中ConsumeOffset用于管理订阅组消费进度(如Map<String/* topicName@groupId */, Map<Integer /QueueId/, Long /Offset/>>)
RocketMQ采用定时任务对上面Map做checkPoint检查(检查周期5秒 - 所以当服务端主备切换或者正常发布时,都会有秒级的消息重复)

消息数据管理

存储核心是极致优化顺序写盘(append only将新消息追加文件末尾)。实现如下

  1. RocketMQ通过MappedByteBuffer实现 mmap 映射虚拟地址关联减少 数据区在缓存区来回拷贝

1.1 限制:mmap 文件不能太大(RocketMQ 1G,通过链表串联成逻辑队列 MappedFileQueue)

单挑消息存储格式

RocketMQ采用复杂存储编码将对象序列化,并写入文件(存储格式包括索引队列编号、位置)

  1. 单消息一般占用大小 = 消息元数据(91B+部分属性) + 消息payload(>2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值