rocketmq-3-消息存储-索引+消息
2023-08-03 17:41:45 0 举报
从消费端开始,站在索引、消息文件结构的视角,剖析消息存储过程!
作者其他创作
大纲/内容
索引数据
commitLogOffset8Byte
8 byte
1.Header索引头,固定40Byte
2
indexCountindex个数
cnsumerOffset
index2
tag hashCode8Byte
CommitLog
已写入
index3
ConsumerQueue1: 逻辑消费队列1
ConsumerQueue2: 逻辑消费队列2
Slot Table500W*4Byte
...
beginTimestamp第一条存储时间
ConsumerQueue消费队列
value=2indexCount
maxOffset
消费者
consumerQueue1
broker消息存储
发送消息:1)topic2)queueId3)message
ConsumerQueue文件结构
consumerQueue0
第一行
第二行
index1
记录的最后一个index的offset
根据key查询消息
commitLog图示
indexFileList2000W*20Byte
msgSize4Byte
生产者
message queue 和consumer queue映射关系
1
500W
endPhyoffset最后一条commitlogOffset
topicA:messagequeue1
Slot Table
topicA:messagequeue0
value=3indexCount
...第30W行
0
Header40Byte
待写入
ReputMessageService重写服务doDispatch分发构建:1)consumerQueue逻辑消费队列2)indexFile索引文件
CommitLogOffset偏移量8Byte
consumerQueue图示
消费消息
index File索引文件-数据结构(类似HashMap)整体大小=40byte+500W*4byte+2000w*20byte
beginPhyoffset第一条commitlogOffset
phyOffset、keys
未消费
4 byte
endTimestamp最后一条存储时间
等待分发
hashSlotcount已使用槽数量
indexFile索引文件
每一个索引数据结构
ConsumerQueue3: 逻辑消费队列3
Timestamp与第一条索引时间差4Byte
已消费
物理结构
Pre Index Offset上一个索引偏移量4Byte
2.槽表(hash(key)%500W)500w*4byte
minOffset
commitLogOffset、msgSize、tagsCode
ConsumerQueue0:逻辑消费队列0
key hashkey哈希4Byte
3. 索引链表,最大2000W个 ,单个20byte
0 条评论
下一页