Broker收到一条消息之后,其实就会直接把消息写入到CommitLog里去,但是它写入刚开始仅仅是写入到MappedFile映射的一块内存里去,后续是根据刷盘策略去决定是否立即把数据从内存刷入磁盘的。
实际上,Broker启动的时候会开启一个线程,ReputMessageService,他会把CommitLog更新事件转发出去,然后让任务处理器去更新ConsumeQueue和IndexFile,如下图。
我们看下面的源码片段,在DefaultMessageStore的start()方法里,在里面就是启动了这个ReputMessageService线程。这个DefaultMessageStore的start()方法就是在Broker启动的时候调用的,所以相当于是Broker启动就会启动这个线程。
this.reputMessageService.setReputFromOffset(maxPhysicalPosInLogicQueue);
this