RocketMQ事务消息及消息索引设计原理

RocketMQ事务消息

  • 正常事务消息的发送及提交
  • 事务消息的补偿流程

一阶段的half消息如何做到对用户不可见?

回滚之后 pending状态的消息如何变成最终状态

通过Op消息来确定提交或回滚事务的最终状态

Half消息的索引构建

一阶段存储的消息的内容
二阶段时恢复出一条完整的普通消息
然后走一遍消息写入流程

消息查询

按照MessageId查询消息

客户端通过messageId得到broker地址
然后再通过commitlog offset读取真正的记录

按照Message Key查询消息

index索引文件组成

文件大小是固定的等于40+500W*4+2000W*20= 420000040个字节大小
  • Header
保存一些总的统计信息
  • Slot Table
不保存真正的索引数据,而是保存每个槽位对应的单向链表的头
  • 20*2000W
20*2000W 是真正的索引数据
即一个 Index File 可以保存 2000W个索引。

类似于HashMap数组+链表的数据结构

每个索引结构

Timestamp记录的是消息storeTimestamp之间的差
并不是一个绝对的时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值