RocketMQ 和 Kafka 有什么区别?
目录
RocketMQ 是什么?
RocketMQ 和 Kafka 的区别
在架构上做减法
简化协调节点
简化分区
Kafka 的底层存储
RocketMQ 的底层存储
简化备份模型
在功能上做加法
消息过滤
支持事务
加入延时队列
加入死信队列
消息回溯
总结
来源:面试官:RocketMQ 和 Kafka 有什么区别?
作为一个程序员,假设你有 A、B 两个服务,A 服务发出消息后,不想让 B 服务立马处理到。而是要过半小时才让 B 服务处理到,该怎么实现?
这类延迟处理消息的场景非常常见,举个例子,比如我每天早上到公司后都会点个外卖,我希望外卖能在中午送过来,而不是立马送过来,这就需要将外卖消息经过延时后,再投递到商家侧。
那么问题就来了,有没有优雅的解决方案?当然有,没有什么是加一层中间层不能解决的,如果有,那就再加一层。这次我们要加的中间层是消息队列 RocketMQ。
RocketMQ 是什么?
RocketMQ 是阿里自研的国产消息队列,目前已经是 Apache 的顶级项目。和其他消息队列一样,它接受来自生产者的消息,将消息分类,每一类是一个 topic,消费者根据需要订阅 topic,获取里面的消息。
是不是很像我们上篇文章里提到的消息队 Kafka,那么问题很自然就来了,既然都是消息队列,那它们之间有什么区别呢?
RocketMQ 和 Kafka 的区别
RocketMQ 的架构其实参考了 Kafka 的设计思想,同时又在 Kafka 的基础上做了一些调整。
这些调整,用一句话总结就是,"和 Kafka 相比,RocketMQ 在架构上做了减法,在功能上做了加法"。我们来看下这句话的含义。
在架构上做减法
我们来简单回顾下消息队列 Kafka 的架构。kakfa 也是通过多个 topic
对消息进行分类。
-
为了提升单个 topic 的并发性能,将单个 topic 拆为多个
partition
。
-
为了提升系统扩展性,将多个 partition 分别部署在不同
broker
上。 -
为了提升系统的可用性,为 partition 加了多个副本。
-
为了协调和管理 Kafka 集群的数据信息,引入
Zookeeper
作为协调节点。
Kafka 已经是非常强的消息队列了,我们来看下 RocketMQ 在 Kafka 架构的基础上,还能玩出什么花样来。
简化协调节点
Zookeeper
在 Kafka 架构中