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之间的差
并不是一个绝对的时间