rocketmq学习-3.broker如何持久化消息

1.messageQueue

顾名思义queue,肯定是指消息队列,和topic的关系是

一个消息主题对应多个messageQueue

属于broker上的一个数据分片,一个topic对应多个queue

生产者发送消息时首先从nameserver里获取topic以及他拥有的messageQueue

然后写入到相应的queue中

2.CommitLog

broker在接收到一条写入信息时,会将这条信息写入到叫做commitLog的日志文件中

此时是顺序写入的

一个commitLog文件限定是1g,写完一个会新建一个commitLog文件

3.consumeQueue

messageQueue队列拥有一个叫做ConsumeQueue的文件,这个文件中会记录每一条写入到commitLog的物理地址(offset偏移量)

每一条数据大概是 offset偏移量+消息的长度+taghashcode 一条数据是20个字节

每个ConsumeQueue文件保存30w条数据,每个文件大概是5.72M

4.CommitLog文件性能

CommitLog文件的写入速度直接影响到整个MQ的TPS

所以commitLog有PageCache和顺序写两个机制

先写入到PageCache中,然后由OS线程异步刷盘顺序写入

5.同步刷盘和异步刷盘两种机制

异步刷盘是指生产者发送给Broker,然后broker写入到PageCache中,就直接返回ACK给生产者了,标志消息写入成功

因为写入到OS PageCache中毕竟是缓存有数据丢失的风险

所以还有同步刷盘的机制

同步刷盘必须是消息刷入到磁盘中才返回ACK给生产者.生产者根据ACK是否返回来决定是否重新写入

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容