对于Broker收到消息之后的处理流程,简单来说,就是Broker通过Netty网络服务器获取到一条消息,接着就会把这条消息写入到一个CommitLog文件里去,一个Broker机器上就只有一个CommitLog文件,所有Topic的消息都会写入到一个文件里去。
然后同时还会以异步的方式把消息写入到ConsumeQueue文件里去,因为一个Topic有多个MessageQueue,任何一条消息都是写入一个MessageQueue的,那个MessageQueue其实就是对应了一个ConsumeQueue文件。所以一条写入MessageQueue的消息,必然会异步进入对应的ConsumeQueue文件。
同时还会异步把消息写入一个IndexFile里,在里面主要就是把每条消息的key和消息在CommitLog中的offset偏移量做一个索引,这样后续如果要根据消息key从CommitLog文件里查询消息,就可以根据IndexFile的索引来了,如下图。
首先Broker收到一个消息之后,必然是先写入CommitLog文件的,那么这个CommitLog文件在磁盘上的目录结构大致如何呢?
CommitLog文件的存储目录是在${ROCKETMQ_HOME}/store/commitlog下的,里面会有很多的CommitLog文件,每个文件默认是1GB大小,一个文件写满了就创建一个新的文件,文件名的话,就是文件中的第一个偏移量,如下面所示。文件名如果不足20位的话,就用0来补齐就可以了。
00000000000000000000
0000000