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是否返回来决定是否重新写入