1、nameServer类似kafka中的zk。zk有主从,同步数据。nameserver主要维护路由信息,相互之间不通信,性能提高很多;意味着NameServer中任意的节点挂了,只要有一台服务节点正常,整个路由服务就不会有影响
2、存储
所有的消息是存储在CommitLog文件中,不区分topic;
consumerQueue 记录的是基于topic的消息索引文件,是有序的。
indexFile记录的是基于key或时间区间的消息的映射文件,也是有序的。
3、broker
与kafka的broker概念类似,里面包含多个topic,每个topic有多个queue,类似kafka的partition,不过kafka可以指定queue的数量,是一主多从的模式,而rockemq中的queue不能指定数量,并且每个broker保存的数据相同,保证一个broken宕机后不影响mq使用。
4、刷盘机制
1. 同步刷盘
消息持久化到磁盘会给生产者返回ack,可以保证消息可靠,但是会影响性能。
2. 异步刷盘
消息写入page cache 就返回ack,提高性能和吞吐量,但会有消息丢失的问题。
RocketMQ 文件保存72 小时,在凌晨4 点将过期文件删除。
RocketMQ 中queue 文件的优缺点:
优点: 只存储少量的数据,更加轻量化。
缺点:写入是顺序的,读取是随机的。先读consumeQueue,再度commitLog,降低读取效率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)