RocketMQ及和Kafka的区别

目录

  • 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,还支持调整时间

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文深入了解DeepSeek-R1:模型架构

本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API,通常需要以下步骤: 1. 获取 DeepSeek API 密钥 首先,确保你已经在 DeepSeek 平台上注册并获取了 API 密钥(API Key)。如果没有,请访问 DeepSeek 的官方网站注册并申请 …

java每日精进 2.13 Ganache(区块链本地私有化部署)

需求:使用区块链实现数据村存储,记录一些不可篡改的交互信息,网络环境为内外网均需要部署; 1.准备工作(软件安装) 1.1 安装 Node.js 和 npm 1.2 安装 Ganache 地址如下:windows有可视化界面 &a…

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE(Multi-gate Mixture-of-Experts,多门混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…

sqli-labs靶场实录(四): Challenges

sqli-labs靶场实录: Challenges Less54确定字段数获取数据库名获取表名获取列名提取密钥值 Less55Less56Less57Less58爆库构造爆表构造爆列构造密钥提取构造 Less59Less60Less61Less62爆库构造 Less63Less64Less65免责声明: Less54 本关开始上难度了 可以看到此关仅…

使用Redis实现分布式锁,基于原本单体系统进行业务改造

一、单体系统下&#xff0c;使用锁机制实现秒杀功能&#xff0c;并限制一人一单功能 1.流程图&#xff1a; 2.代码实现&#xff1a; Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderSe…

Python + WhisperX:解锁语音识别的高效新姿势

大家好&#xff0c;我是烤鸭&#xff1a; 最近在尝试做视频的质量分析&#xff0c;打算利用asr针对声音判断是否有人声&#xff0c;以及识别出来的文本进行进一步操作。asr看了几个开源的&#xff0c;最终选择了openai的whisper&#xff0c;后来发现性能不行&#xff0c;又换了…

【Linux】Ubuntu Linux 系统——Node.js 开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天星期五了&#xff0c;同时也是2025年的情人节&#xff0c;今晚又是一个人的举个爪子&#xff01;&#xff01; &#x1f642; 本文是有关Linux 操作系统中 Node.js 开发环境基础知识&#xff0c;后续我将添加更多相关知识噢&a…

Oracle查看执行计划

方式一&#xff08;查看的真实的使用到的索引&#xff09; 1.执行解释计划 2.查看结果 可以看到使用了RANGE SCAN范围扫描的索引 方式二&#xff08;查看的是预测的可能会用到的索引&#xff09; 1.执行解释计划sql explain plan for select * from COURSE where COURSE_…

百度 AI开源!将在6月30日开源文心大模型4.5系列

【大力财经】直击互联网最前线&#xff1a;百度近期动作频频&#xff0c;先是宣布将在未来数月陆续推出文心大模型4.5系列&#xff0c;并于6月30日正式开源。 据大力财经了解&#xff0c;自DeepSeek开源之风盛行全球后&#xff0c;开源闭源路径的选择就成为AI领域的热门话题&a…

【DDD系列-2】风暴出的领域模型

为什么使用DDD​ 三个问题​ 1.为什么我们的系统越做越多&#xff0c;越来越庞大&#xff0c;还需要不断的重构&#xff1f;​ 2.为什么我们的系统业务越来越复杂&#xff0c;服务层的代码越来越多难以维护&#xff0c;不敢维护&#xff1f;​ 3.为什么一旦业务变化或者数据…

基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 系统建模 4.2 YALMIP工具箱 4.3 CPLEX工具箱 5.完整工程文件 1.课题概述 基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真。通过YALMIP和cplex这两个工具箱&#xff0c;完成微电网的最优调…

visual studio导入cmake项目后打开无法删除和回车

通过Cmakelists.txt导入的项目做删除和回车无法响应&#xff0c;需要点击项目&#xff0c;然后选择配置项目就可以了

npm安装时无法访问github域名的解决方法

个人博客地址&#xff1a;npm安装时无法访问github域名的解决方法 | 一张假钞的真实世界 今天在用npm install的时候出现了github项目访问不了的异常&#xff1a; npm ERR! Error while executing: npm ERR! /bin/git ls-remote -h -t https://github.com/nhn/raphael.git np…

解锁豆瓣高清海报(三)从深度爬虫到URL构造,实现极速下载

脚本地址: 项目地址: Gazer PosterBandit_v2.py 前瞻 之前的 PosterBandit.py 是按照深度爬虫的思路一步步进入海报界面来爬取, 是个值得学习的思路, 但缺点是它爬取慢, 仍然容易碰到豆瓣的 418 错误, 本文也会指出彻底解决旧版 418 错误的方法并提高爬取速度. 现在我将介绍…

一维差分算法篇:高效处理区间加减

那么在正式介绍我们的一维差分的原理前&#xff0c;我们先来看一下一维差分所应用的一个场景&#xff0c;那么假设我们现在有一个区间为[L,R]的一个数组&#xff0c;那么我要在这个数组中的某个子区间比如[i,m] (L<i<m<R)进行一个加k值或者减去k值的一个操作&#xff…

信息收集-Web应用JS架构URL提取数据匹配Fuzz接口WebPack分析自动化

知识点&#xff1a; 1、信息收集-Web应用-JS提取分析-人工&插件&项目 2、信息收集-Web应用-JS提取分析-URL&配置&逻辑 FUZZ测试 ffuf https://github.com/ffuf/ffuf 匹配插件 Hae https://github.com/gh0stkey/HaE JS提取 JSFinder https://github.com/Threez…

Python基础语法精要

文章目录 一、Python的起源二、Python的用途三、Python的优缺点优点缺点 四、基础语法&#xff08;1&#xff09;常量和表达式&#xff08;2&#xff09;变量变量的语法&#xff08;i&#xff09;定义变量&#xff08;ii&#xff09;变量命名的规则 &#xff08;3&#xff09;变…

测试方案整理

搜索引擎放在那里&#xff1f;研发 查看问题样本或者在提取再批量入录等情况&#xff0c;一旦我没有勾选或者全选中已经批量入录的样本&#xff0c;那么在直接点击批量提取或查看问题样本的后&#xff0c;会自动默认为选择全选样本还是按照输入错误处理&#xff1f; 批量查看返…

开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革

2月18号&#xff0c;Wyn 商业智能 V8.0Update1 版本将重磅推出对话式智能分析&#xff0c;集成Deepseek R1大模型&#xff0c;通过AI技术的深度融合&#xff0c;致力于打造"会思考的BI系统"&#xff0c;让数据价值触手可及&#xff0c;助力企业实现从数据洞察到决策执…