消息的存储
1.消息生产者发送消息到MQ
2.MQ收到消息,将消息进行持久化,存储该消息
(避免broker宕机造成生产者不断重发消息而造成消费者的重复消费)
3.MQ返回ACK给生产者
4.MQ push消息给对应的消费者
5.消息消费者返回ACK给MQ
6.MQ删除消息
rocketmq直接将消息存在文件系统上面,而activemq是存在数据库中
消息服务器会先向文件磁盘当中预先申请连续的一片空间,进行消息的顺序存取,提高消息的提取速度。
消息的发送:
linux系统发送数据的方式为零拷贝
数据传输由传统高的4次复制简化成3次复制,减少1次复制 的过程,不过要预留存储空间,用于保存数据。
消息的存储结构
消息数据存储区域:
topic,queueid,message
消费逻辑队列
minoffset
maxoffset
consumeroffse
刷盘机制:
同步刷盘:只有在磁盘存储好消息的时候才会返回
异步刷盘:
同步刷盘:安全性高,效率低,进度慢(适用于对数据安全要求较高的业务)
异步刷盘:安全性低,效率高,速度快(适用于对数据处理速度要求较高的业务)
高可用性
nameserver:无状态+全服务器注册
消息服务器:2m-2s
消息生产:生产者将相同的topic绑定到多个group组保障master挂掉之后,其他master仍然可以正常进行消息接受
消息消费
rocketmq自身会根据master的压力确认是否由master承担消息读取的功能,当master繁忙的时候,自动切换slave承担数据读取的工作