RocketMQ及和Kafka的区别

news2025/2/15 9:21:59

目录

  • 1 从场景入手
  • 2 RocketMQ是什么?
  • 3 RocketMQ及和Kafka的区别
    • 3.1 在架构上做了减法
      • 3.1.1 简化协调节点
      • 3.1.2 简化分区
      • 3.1.3 底层存储
        • 3.1.3.1 Kafka底层存储
        • 3.1.3.1 RocketMQ底层存储
      • 3.1.4 简化备份模型
        • 3.1.4.1 Kafka备份模型
        • 3.1.4.2 RocketMQ备份模型
      • 3.1.5 RocketMq架构
    • 3.2 在功能上做加法
      • 3.2.1 消息过滤
      • 3.2.2 支持事务
      • 3.2.3 加入延时队列
      • 3.2.4 加入死信队列
      • 3.2.5 消息回溯

1 从场景入手

在这里插入图片描述

假设A服务过来一个请求,但是不想让B服务马上处理,需要等待一段时间才做处理,比如定时外卖的场景。
在这里插入图片描述
那如何处理上述问题,那就可以在服务之间加一个中间层。

2 RocketMQ是什么?

是国产自研的消息队列,是Apache的顶级项目
在这里插入图片描述
和Kafka一样都是消息队列

3 RocketMQ及和Kafka的区别

其实就是RocketMQ在Kafka的架构上做了一些架构上的调整
在这里插入图片描述

总结:在架构上做了减法,在功能上做了加法

3.1 在架构上做了减法

3.1.1 简化协调节点

zookeeper在Kafka架构中会和broker通信,维护Kafka信息,一个新的broker加入后,其他broker会立马感知它的加入。

在这里插入图片描述
像这种在分布式结构下让多个实例同时获取同一份信息的服务就是所谓的分布式协调服务
在这里插入图片描述

zookeeper不仅可用于服务注册和发现,还可以用于分布式锁管理配置管理等场景。
Kafka只用到部分场景,有点杀鸡用牛刀了!

下面是rocketMq的架构:
在这里插入图片描述

所以RocketMQ把zookeeper去掉,使用nameServer,用更轻量的方式管理消息队列的集群信息。

后来Kafka也发现了zookeeper过重的问题,从2.8.0版本移除zookeeper,通过broker之间加入一致性算法Raft实现同样的效果。

下面是Kafka的架构:
在这里插入图片描述
这就是所谓的Kraft或Quorum模式

3.1.2 简化分区

RocketMQ也会拆分多个分区,不叫partition,叫queue
在这里插入图片描述
kafka的partition中会存入完整消息,但是RocketMQ的queue中只存入一些简要信息,比如消息偏移offset,而消息的完整信息放到commitLog里,通过offset可以定位到commitLog的某条消息。

在这里插入图片描述
在Kafka中消费者只需要直接从partition中读取消息,然而在RocketMQ中,消费者需要先从queue中读到offset的值,再跑到commitLog上将完整的数据读取出来,也就是读取了两次
在这里插入图片描述
看起来Kafka的设计更高效,但是为何RocketMQ要用此设计?

3.1.3 底层存储

3.1.3.1 Kafka底层存储

在这里插入图片描述

Kafka下有partition,每个partition是由多个segment组成的,生产者发送数据也就是在往segment中写入数据,就是往磁盘做写入,磁盘的顺序写入会比随机写入快很多,性能差距很大,可高达几十倍。
为了提升性能,Kafka对于每个segment的写入也都是顺序写。
在这里插入图片描述

但是当topic变多了,Kafka下的partition也会增多,对应的segment文件也会变多,同时写多个topic下的partition就相当于写多个文件,不同的topic下的文件存放在磁盘的不同地方,这样的话即使segment内部是顺序写,但是针对于不同topic下的文件是随机写。

3.1.3.1 RocketMQ底层存储

在这里插入图片描述

为了缓解同时写多个文件带来的随机写的问题,RocketMQ将单个broker地下的多个topic数据,全部写到“一个”逻辑文件CommitLog上,这就消除了写多个文件的随机写问题,将所有写操作变成了顺序写,提升了RocketMQ在多topic场景下的写性能。

3.1.4 简化备份模型

3.1.4.1 Kafka备份模型

在这里插入图片描述
底层就是同步segment数据

3.1.4.2 RocketMQ备份模型

在这里插入图片描述
在这里插入图片描述

RocketMQ直接同步commitLog数据,以broker为单位区分主从

3.1.5 RocketMq架构

在这里插入图片描述

3.2 在功能上做加法

3.2.1 消息过滤

在这里插入图片描述

Kafka支持通过topic将数据进行分类
在这里插入图片描述
场景:
当我们有如上图4、5、6、7一共4条数据,他们有不同类型,如果我们只想要vip6的数据。

kafka需要消费topic为用户数据的所有消息,再将vip6的用户过滤出来。
RocketMQ支持给用户数据打tag,消费者根据tag过滤所需要的数据,消费者就可以只消费这部分数据,就剩下了消费者过滤数据的资源消耗。
在这里插入图片描述

3.2.2 支持事务

Kafka支持事务,保证发送的一批消息同时成功或者同时失败,
但是我们写业务代码的时候,希望执行一些自定义逻辑和生产者发送消息这两件事要么同时成功要么同时失败,这是RocketMQ支持的事务能力
在这里插入图片描述

3.2.3 加入延时队列

当我们希望消息被投递出去之后,消费者不是立马消费而是过一段时间再去消费,也就是所谓的延时消息,这就要用到RocketMQ的延时队列,而Kafka就需要程序员自己实现类似的功能。

3.2.4 加入死信队列

消费消息是有可能失败的,失败后一般可以设置重试,如果多次重试失败,RocketMQ会将消息放在一个专门的队列中,方便我们单独做处理,这种专门存放失败消息的队列就是死信队列,kafka不支持,需要程序员实现。
在这里插入图片描述

3.2.5 消息回溯

在这里插入图片描述

Kafka支持从某个地方开始消费,即offset,后来也支持时间(0.10.1版本后)
在这里插入图片描述

RocketMQ不仅支持调整offset,还支持调整时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2298465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统

项目介绍 本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…

Datawhale Ollama教程笔记3

小白的看课思路: Ollama REST API 是什么? 想象一下,你有一个智能的“盒子”(Ollama),里面装了很多聪明的“小助手”(语言模型)。如果你想让这些“小助手”帮你完成一些任务&#…

基于JavaWeb开发的Java+Spring+vue+element实现旅游信息管理平台系统

基于JavaWeb开发的JavaSpringvueelement实现旅游信息管理平台系统 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各…

【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析

引言 在大数据与云原生技术快速发展的时代,开源技术成为推动行业进步的重要力量。本文将深入探讨三个备受瞩目的开源产品组件:DeepSeek、DataSophon 和 DolphinScheduler,分别从产品定义、功能、技术架构、应用场景、优劣势及社区活跃度等方面…

云计算实训室解决方案(2025年最新版)

一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展,相关领域人才需求激增,许多本科及职业院校纷纷开设云计算及相关专业方向。 然而,大多数院校在专业建设过程中面临以下困难&…

我的新书《青少年Python趣学编程(微课视频版)》出版了!

🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…

网络安全要学python 、爬虫吗

网络安全其实并不复杂,只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分:web安全和二进制逆向安全。web安全是网络安全的入门方向,内容简单,就…

DBSCAN 基于密度的空间带噪聚类法

DBSCAN 基于密度的空间带噪聚类法 DBSCAN(Density - Based Spatial Clustering of Applications with Noise)即基于密度的空间聚类算法,它是一种典型的密度聚类算法,以下从核心概念、算法步骤、优缺点及应用场景等方面进行解释。…

Python基于Django的漏洞扫描系统【附源码、文档说明】

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

或非门组成的SR锁存器真值表相关问题

PS:主要是给大家抛砖引玉,不喜勿喷。 问题描述:或非门组成的SR锁存器,为什么当SD和RD等于0时候的真值表一个是Q0,Q0.一个结果是Q1,Q1?

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

在深度学习框架中,TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow(点击查看) 和 PyTorch(点击查看)。它们引领着 AI 开发的潮流,吸引着无数开发者投身其中。但这两大框…

【前端框架】Vue3 面试题深度解析

本文详细讲解了VUE3相关的面试题,从基础到进阶到高级,分别都有涉及,希望对你有所帮助! 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化? 答案: 响应式系统:Vue2 使用 Object.definePrope…

GRN前沿:DGCGRN:基于有向图卷积网络的基因调控网络推理

1.论文原名:Inference of gene regulatory networks based on directed graph convolutional networks 2.发表日期:2024 DGCGRN框架 中心节点和节点的构建 局部增强策略 1. 问题背景 在基因调控网络中,许多节点的连接度较低(即…

unity删除了安卓打包平台,unityhub 还显示已经安装,怎么解决

解决问题地址 可能由于版本问题文章中这个我没搜到,应该搜Android Build Supprot

C++ Primer 参数传递

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

数据结构 day06

数据结构 day06 6. 双向链表6.3. 双向循环链表 7. 树 tree7.1. 特点7.1.1. 什么是树7.1.2. 树的特性7.1.3. 关于树的一些术语 7.2. 二叉树7.2.1. 什么是二叉树7.2.2. 二叉树的性质7.2.3. 满二叉树和完全二叉树的区别7.2.4. 二叉树的遍历(画图)7.2.5. 二叉…

AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI

前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…

01什么是DevOps

在日常开发中,运维人员主要负责跟生产环境打交道,开发和测试,不去操作生产环境的内容,生产环境由运维人员操作,这里面包含了环境的搭建、系统监控、故障的转移,还有软件的维护等内容。 当一个项目开发完毕&…

力扣100. 相同的树(利用分解思想解决)

Problem: 100. 相同的树 文章目录 题目描述思路Code 题目描述 思路 题目要求判断两个二叉树是否完全相同,而此要求可以利用问题分解的思想解决,即判断当前节点的左右子树是否完全相同,而在二叉树问题分解的一般题目中均会带有返回值&#xff…

el-select 设置宽度 没效果

想实现下面的效果,一行两个,充满el-col12 然后设置了 width100%,当时一直没有效果 解决原因: el-form 添加了 inline 所以删除inline属性 即可