RocketMQ 的消息持久化机制

RocketMQ 持久化机制

RocketMQ 的消息持久化主要依靠以下文件完成

  1. CommitLog

    日志数据文件,存储消息内容,所有 queue 共享,不区分 topic ,顺序读写 ,1G 一个文件

  2. ConsumeQueue

    逻辑 Queue,基于 topic 的 CommitLog 的索引文件

    消息先到达 commitLog,然后异步转发到 consumeQueue,包含 queue 在 commitLog 中的物理偏移量 offset,消息实体内容大小和 Message Tag 的 hash 值,大于 600W 个字节,写满之后重新生成,顺序写

  3. IndexFile

    基于 Key 或 时间区间的 CommitLog 的索引文件,文件名以创建的时间戳命名,固定的单个 indexFile 大小为 400M,可以保存 2000W 个索引

RocketMQ 的 queue 只存储少量数据、更加的轻量化,对于磁盘的访问是串行化避免磁盘竞争;缺点:写入是顺序写,但读是随机读,先读 ConsumeQueue,再读 CommitLog ,会降低消息读的效率

消息发送到 broker 后,会被写入 commitLog,写之前加锁,保证顺序写入。然后转发到 consumeQueue

  • 同步刷盘:消息持久化到磁盘才会给生产者返回 ACK,保证消息可靠,但是会影响性能
  • 异步刷盘:消息写入 pageCache 就返回 ACK 给生产者,刷盘采用异步线程,降低读写延迟,提高性能和吞吐,但是消息有可能丢失
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值