消息中间件对比
本文以RabbitMQ和Kafka为主,对消息中间件的不同方面进行对比,整理了消息中间件在设计和实现方面的差别,在实际使用中可作参考、借鉴。
主要参考资料:
RabbitMQ、Kafka、RocketMQ官方文档;
分布式消息中间件时间(倪炜 著);
深入理解Kafka:核心设计与实践原理;
RabbitMQ实战指南(朱忠华 著);
支持的协议
Kafka 基于TCP,自己定义的协议
RabbitMQ AMQP
RocketMQ 自己定义的协议
开发语言
Kafka Scala
RabbitMQ Erlang
RocketMQ Java
架构
Kafka架构:

RabbitMQ架构:

消息存储
对比1:
Kafka中消息可存储于内存、磁盘、数据库。支持大量堆积。
RabbitMQ中消息存储与内存和磁盘。不支持大量堆积。(除了带有持久存储标签的消息,在内存够用的情况下一般不往磁盘中放,因此限制了消息的可堆积量)
对比2:
Kafka中的消息队列是以文件为存储形式,可以记录一个个偏移量offset,为很多机制的实现提供了诸多便利。
RabbitMQ中的消息队列是队列的形式,在很多方便没有kafka方便,这也是rabbitMQ不支持消息大量堆积的一个原因。
安全性保障(单节点故障应对)
Kafka:多副本机制
Kafka为分区引入了多副本的机制(Replica),通过增加副本数量可以提高容灾能力。同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是“一主

本文详细对比了Kafka和RabbitMQ在支持协议、开发语言、架构、消息存储、安全性保障、水平扩展、负载均衡、消息持久化等方面的特点,揭示了它们在设计和实现上的差异。Kafka支持TCP自定义协议,消息存储于日志文件,具有高效水平扩展和负载均衡能力,而RabbitMQ基于AMQP,消息存储在内存和磁盘,侧重于消息一致性。两者的消息持久化和避免重复策略也各有特点,适合不同场景的需求。
最低0.47元/天 解锁文章
987

被折叠的 条评论
为什么被折叠?



