自研NameServer
摒弃业界常用的Zookeeper,使用自研的NameServer实现元数据的管理(Topic路由信息等)。
从实际场景出发,topic路由在集群中无需保持强一致性,仅需保持最终一致性,且能够容忍分钟级别的不一致,因此,rockermq自研的NameServer摒弃了集群之间的相互通信,而是相互独立,不仅极大的降低了NameServer实现的复杂度,降低了对网络的要求,同时也因此,性能相比Zookeeper有了极大地提升。
高效的IO存储机制
为了追求消息发送的高吞吐量,rocketmq引入了内存映射机制。rocketmq以文件组的方式,存储消息的存储文件,每个文件组内的单个文件大小固定,所有Topic下的消息全部基于顺序写,极大的提高了消息的写性能。
为了消息的消费和查找,rocketmq还引入了消息消费队列文件和索引文件。
为了避免消息不断累积,rocketmq引入了消息文件过期机制(默认保留3天)以及文件存储空间报警机制。
消费者幂等消费消息
rocketmq通过消息消费确认机制(ACK)确保消息至少被消费一次,但不保证消息不会被重复消费,也就是说,消费者可能会消费同条消息多次,这里就需要消费者消费时,逻辑上实现幂等。