
RocketMQ
文章平均质量分 54
酒醉梦醒
JAVA
展开
-
RocketMq存储设计——Index file
index file设计rocket mq存储设计原创 2022-06-30 09:36:48 · 430 阅读 · 1 评论 -
RocketMq存储设计——Consume Queue
consume queue是mq的消费索引文件,只要你知道consume queue offset就能快速定位到commit log offset,就能快速定位到一条消息。注意一个consume queue对象和某个topic下的某个队列的的一个文件等价。每个topic下默认会分配四个队列(0,1,2,3),队列下的一个文件就是一个consume queue对象。例如:我知道topic下的队列1的consume queue offset = 1 ,我可以知道我要去0000000000000000这个文原创 2022-06-30 09:28:45 · 702 阅读 · 0 评论 -
RocketMq存储设计——CommitLog
commit log是RocketMQ真正存储消息的文件,文件存储依赖于mapped file ,mapped file queue刷盘线程异步刷盘FlushRealTimeService,没啥好说的,调用MappedFileQueue的flush方法刷盘就好思想非常好,用两个非线程安全的list,只有swapRequests的时候有竞争,其余时候都没有竞争,类似于copy on write思想,实现刷盘的时候刷盘一组request,并唤醒一组等待线程堆外内存刷到page cacheCommitR原创 2022-06-30 09:11:57 · 824 阅读 · 0 评论 -
RocketMq存储设计——MappedFile
RocketMq存储很多地方使用到了他,例如commit log(存储真正的消息数据),consume queue(真正的消息数据的索引),store check point等。你可以把MappedFile理解成一个工具,当你需要把数据储存到磁盘,从磁盘快速查找数据,使用它会非常高效。它使用mmap和send file系统调用加速文件的存储与查找。mmap映射的就是os page cache,一页默认大小4kb,即使mq宕机了,只要机器还在运行,os会把page cache刷到磁盘,不会丢失数据。当消息过原创 2022-06-29 09:55:10 · 582 阅读 · 0 评论