----------------------由于在分布式事务学习当中使用到RocketMQ所以顺便学习了RocketMQ的使用及原理
NameServer集群,topic的路由注册中心,为客户端根据Topic提供路由服务,从而引导客户端向Broker发送消息,NameServer之间的节点不通信,路由信息在NameServer集群中数据一致性采取最终一致性。
NameServer是在内存中存储Topic的路由消息,持久化Topic路由信息的地方是Broker中即${ ROCKETMQ_HOME}/store/config/topics.json。
存储结构 RoketMQ消息的存储是由COnsumerQueue和CommitLog配合完成的,消息真正的物理存储文件是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址,每个Topic下的每个MessageQueue都有一个对应的ConsumeQueue文件
CommitLog:存储消息的元数据 所有的消息都存储在commitLog上面 ConsumeQueue:主要是存储的每个消息的偏移量 IndexFile:为了消息查询提供一种通过Key或时间区间来查询消息的方法,这种通过IndexFile来查找消息的方法不影响与消费消息的主流程。 生产者将消息发送到Broker服务器上的时候,此时会Broker服务器会把把消息顺时写入到CommitLog当中,(因为磁盘顺时写入是非常快的) 【顺序读写,主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。 随机读写,需要多次寻道和旋转延迟。而这个时间可能是传输时间的许多倍。 顺序读写,磁盘会预读,预读即在读取的起始地址连续读取多个页面】 所以来说这也是RokcetMQ高性能所在的原因之一。 「IndexFile」 是 RocketMQ 为消息订阅构建的索引文件,用来提高根据主题与消息队列检索消息的速度
刷盘机制
1 打开Broker配置文件 配置同步刷盘和异步刷盘
同步刷盘
在返回写成功状态时,消息已经被写入到磁盘,具体流程是,消息写入到内存的PAGECACHE后,立刻通知刷盘线程刷盘,然后等待刷盘完成,刷盘线程执行完成后唤醒等待的小城,返回消息写入成功状态
异步刷盘
在返回写成功状态时,消息可能只是被写入到了内存PAGECACHE,写操作的返回快,吞吐量大,当内存里的消息量积累到一定程度是,同一触发写磁盘动作 快速写入
高可用机制
Maste和Slave的区别:在Broker的配置文件中,参数BrokerID值为0表明这个Broker是Maste,大于0表明这个Broker是Slave,同时BrokerRole参数也会说明这个Broker是Master还是Slave Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Maste角色的Broker连接写入消息,Cosumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
------后续