RocketMQ 存储文件结构设计
2020-06-16 10:25:02 0 举报
RocketMQ 存储文件结构设计
作者其他创作
大纲/内容
msg index3
Index Linked List(20 * 2000w)
msg3
msg2
. . . . . .
msgN
1. 所有 Topic 的消息存储在一个 commitlog 文件中,顺序写效率高;受 mmap 文件内存映射的限制,单个文件 1G 大小;2. 每个 Topic 有自己的多个 consumequeue 文件,每个文件里有多个 msg,每个 msg 由 CommitLog Offset、Size 和 Msg Tag HashCode 组成;3. consumequeue 里单个 msg 里之所以存 tag,是因为在进行 Broker 端消息过滤时比对 tag 决定是否消费消息;而之所以存 tag 的 hashcode 而不是字符串,是因为定长方式存储,节约空间;
Slot Table
Slot Table(4 * 500w)
msg1
Key Hash
commitlog
Header
msg index1
1. 在已有的 CommitLog 和 ConsumeQueue 基础之上,消息发送和消费逻辑已经可以得到满足,引入 Index 是为消息建立索引方便问题排查:在给定消息 Topic 和 Key 的前提下,快速定位消息;(而通过 MsgId 很容易定位消息,因为它由 broker 地址和 CommitLog Offset 组成)2. 根据 key 的 hashcode % slotNum 得到在 slot table 中具体的槽位3. 每个 slot value 是在 Index Linked List 中偏移量,指向该 slot 的最新的一个 msg index;每个 msg index 用 Next Index Offset 连接下一个 msg index
. . .
consumequeue
0
500w
2
Size
1
Msg Tag HashCode
Index Linked List
根据 offset 和 size 查找
Timestamp
Next Index Offset
msg indexN
msg index2
Index File 结构
CommitLog Offset
数据结构
收藏
收藏
0 条评论
下一页