RocketMQ 和 Kafka 有什么区别?

news/2025/1/12 1:55:40 标签: 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 架构中


http://www.niftyadmin.cn/n/5820471.html

相关文章

Leecode刷题C语言之统计重新排列后包含另一个字符串的子字符串数目②

执行结果:通过 执行用时和内存消耗如下: void update(int *diff, int c, int add, int *cnt) {diff[c] add;if (add 1 && diff[c] 0) {// 表明 diff[c] 由 -1 变为 0(*cnt)--;} else if (add -1 && diff[c] -1) {// 表明 diff[c] 由 0 变为 -…

python 大文件读取 mmap,多线程,协程,迭代器对比

场景: 需要对一个很大的文本文件读取,获取需要的数据。要求:1.快,不能几十秒,一两分钟还没读完。2.不能太占用cpu,内存。经过搜索后发现python内置的mmap在大文件读取上速度很快。但是我遇到的问题还有一个…

学习打怪日记

目录 0 关于1 SpringBoot上传大文件抛出异常:MaxUploadSizeExceededException2 SpringBoot警告:HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl6221f160 (No operations allowed after connection closed.). Possibly …

继承(7)

大家好,今天我们继续来学习一下继承的知识,这方面需要大家勤动脑才能理解,那么我们来看。 1.9 protected关键字 在类和对象章节中,为了实现封装特性,java中引入访向限定符,主要限定:类或者类中成员能否在类外和其他包中被访问. …

领域驱动设计(DDD)——实体(Entity)和值对象(Value Object) 详解和示例

在领域驱动设计(DDD,Domain-Driven Design)中,实体(Entity)和值对象(Value Object)是两种核心的领域模型概念,它们用于表示业务中的对象。 在领域驱动设计(DD…

C语言环形缓冲区:原理、实现与图解详解 环形缓冲区实现

环形缓冲区(Circular Buffer),也称为循环队列或Ring Buffer,是一种非常实用的数据结构,尤其在生产者-消费者模型中,用于解决数据传输速度不匹配的问题。本文将深入讲解C语言中环形缓冲区的实现原理、关键概…

基于深度学习的视觉检测小项目(十) 通过样式表改变界面的外观

一、创建色卡模板文件 在PS中打开之前创建的色卡文件,用吸管拾色器吸取各个色卡的色彩值: 并保存为JSON文件,color_card.json,文件保存在项目的/settings目录下: {"colors": {"RED": "#dc1…

思维转换:突破思维桎梏,创造更高效的工作与生活

在现代职场和生活中,我们经常面临着各种挑战和问题,有时候虽然付出了很多努力,但依然难以找到更有效的解决方案。这时,或许我们需要的不是更多的努力,而是一次“思维转换”。这一概念看似简单,但它背后却蕴…