科普rabbitmq,rocketmq,kafka三者的架构比较

news2024/10/7 8:22:42

对比在这里插入图片描述
在这里插入图片描述
架构对比
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
从架构可以看出三者有些类似,但是在细节上有很多不同。下面我们就从它们的各个组件,介绍它们:

RabbitMQ,是一种开源的消息队列中间件。下面是RabbitMQ中与其相关的几个概念:

1.生产者(Producer):生产者是消息的发送者,将消息发送到RabbitMQ的消息队列中。

2.消费者(Consumer):消费者是消息的接收者,从RabbitMQ的消息队列中获取消息并进行处理。

3.消息队列(Message Queue):消息队列是RabbitMQ的核心组件,用于存储待处理的消息。生产者将消息发送到队列中,消费者从队列中获取消息进行处理。

4.交换机(Exchange):交换机负责接收生产者发送的消息,并根据一定的规则将消息路由到一个或多个消息队列中。常见的交换机类型包括直连交换机(direct exchange)、主题交换机(topic exchange)、扇形交换机(fanout exchange)等。

5.绑定(Binding):绑定是指将交换机和消息队列进行关联,定义了交换机将消息路由到哪些队列中。绑定通常使用规则(routing key)来匹配消息和队列。

6.路由键(Routing Key):路由键是生产者在将消息发送给交换机时附带的关键字,用于指定消息的路由规则。

RocketMQ 是阿里巴巴开源的分布式消息中间件,下面是 RocketMQ 中与其相关的一些概念:

1.生产者(Producer):生产者负责生成并发送消息到 RocketMQ 中。

2.消费者(Consumer):消费者从 RocketMQ 中订阅并消费消息。

3.主题(Topic):主题是消息的逻辑分类,每个消息都属于一个特定的主题。生产者将消息发送到指定的主题,消费者通过订阅主题来接收相关的消息。

4.消息队列(Message Queue):主题被拆分成多个消息队列,每个消息队列按照顺序存储消息。消费者从消息队列中拉取消息进行消费。

5.消费者组(Consumer Group):消费者组是一组具有相同 Group ID 的消费者实例。每个消息只会被消费者组中的其中一个消费者实例消费,实现负载均衡和高可用性。

6.Broker:Broker 是 RocketMQ 的核心组件,它负责接收、存储和转发消息。一个 RocketMQ 系统通常由多个 Broker 组成,每个 Broker 负责管理若干个消息队列。每个消息队列只属于一个 Broker,但一个 Broker 可以管理多个消息队列。

7.Name Server:Name Server 是 RocketMQ 的命名服务组件,用于管理整个 RocketMQ 系统的元数据信息。生产者和消费者通过 Name Server 定位到对应的 Broker 服务器。Name Server 还负责管理主题、消费者组、路由信息等。

Kafka 是由 Apache 软件基金会开源的分布式流处理平台,其核心组件包括以下几个:

1.Broker:Kafka 的核心组件之一,负责存储和处理数据。一个 Kafka 系统通常由多个 Broker 组成,每个 Broker 负责管理一部分数据副本。

2.Topic:Topic 是指数据的类别或主题,每条消息都属于一个特定的主题。生产者将消息发送到指定的主题,消费者通过订阅主题来接收相关的消息。

3.Partition:Partition 是将一个 Topic 分割成多个较小的、有序的数据单元。每个 Partition 存储了 Topic 对应的部分消息数据。分区的好处是可以提高并发处理能力和扩展性。

4.生产者(Producer):生产者负责生成并发送消息到 Kafka 的 Broker。Producer 可以选择将消息发送到指定的 Topic 和 Partition。

5.消费者(Consumer):消费者从 Kafka 的 Broker 订阅并消费消息。可以通过消费者组的方式对消息进行分组,每个消费者组中的消费者共同消费一个 Topic。

6.消费者组(Consumer Group):消费者组是一组具有相同 Group ID 的消费者实例。每个消息只会被消费者组中的其中一个消费者实例消费,实现负载均衡和高可用性。

7.ZooKeeper:Kafka 使用 ZooKeeper 来进行集群管理、元数据存储和领导者选举等操作。ZooKeeper 负责协调 Broker 和其他组件之间的通信。

不同:
在发送消息和拉取消息方面,Kafka、RocketMQ 和 RabbitMQ 有一些区别。

1.RabbitMQ:
发送消息:RabbitMQ 中的生产者(Producer)将消息发送到指定的 Exchange。生产者发送消息时可以指定消息的 Routing Key,Exchange 根据 Routing Key 将消息路由到相应的队列。
拉取消息:RabbitMQ 中的消费者(Consumer)通过订阅队列来拉取消息。消费者可以按照默认顺序或自定义顺序消费队列中的消息。消费者可以选择轮询方式拉取消息,也可以使用 Basic.Consume RPC 方法主动拉取消息。

2.RocketMQ:
发送消息:RocketMQ 的生产者(Producer)将消息发送到指定的 Topic,并不能直接选择要发送到的队列,而是由 Broker 负责将消息分发到相应的队列中。发送消息时可以选择同步或异步方式。
拉取消息:RocketMQ 的消费者(Consumer)通过订阅 Topic 和指定消费者组(Consumer Group)来拉取消息。RocketMQ 提供了两种消费模式:集群模式(负载均衡消费)和广播模式(每个消费者都会收到全部消息)。消费者可以按照默认顺序拉取消息或指定顺序拉取消息。

3.Kafka:
发送消息:Kafka 中的生产者(Producer)将消息发送到指定的 Topic,并选择要发送到的 Partition。生产者可以异步发送消息,不必等待消息被写入磁盘。
拉取消息:Kafka 中的消费者(Consumer)通过订阅 Topic 来拉取消息。消费者可以自主控制从哪个 Offset(偏移量)开始拉取消息,并可以按照自己的速度消费消息。Kafka 提供了高性能的批量拉取机制,可以一次性拉取多条消息。

前二者可以实现延迟队列,死信队列,而kafka不行。

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

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

相关文章

微软输入法如何打勾和箭头的符号

文章目录 一、打 “√” 符号二、打 “←” 和 “→” 符号 一、打 “√” 符号 选中 “表情包” 图标 选中 “Ω” 符号后,下拉找到 “√” 即可。 微软输入法打 “ ”这个符号直接输入拼音“cha”就行。 二、打 “←” 和 “→” 符号 拼音直接打 “zuo” 或 “…

GET 和 POST的区别

GET 和 POST 是 HTTP 请求的两种基本方法,要说它们的区别,接触过 WEB 开发的人都能说出一二。 最直观的区别就是 GET 把参数包含在 URL 中,POST 通过 request body 传递参数。 你可能自己写过无数个 GET 和 POST 请求,或者已经看…

扫雷小游戏(简单详细)(内附完整代码)

设计总体思路 实现游戏可以一直玩,先打印棋盘,玩家和电脑下棋,最后分出胜负。 如果编写较大的程序,我们可以分不同模块 例如这个扫雷,我们可以创建三个文件 分别为: game.h 函数的声明game.c 函数的…

《深度不确定条件下的决策:从理论到实践》PDF

制定未来计划时需要预测变化,尤其是制定长期计划或针对罕见事件的计划时。当这些变化存在高度不确定性的时候,这种预期就变得越来越困难。 今天给大家介绍的这本《深度不确定条件下的决策:从理论到实践》正是解决以上问题的良方。完整书籍文…

注意力机制是否比矩阵分解更好?——IS ATTENTION BETTER THAN MATRIX DECOMPOSITION?

原文链接:https://openreview.net/pdf?id1FvkSpWosOlhttps://openreview.net/pdf?id1FvkSpWosOl 代码库:​​​​​​​​​​​​​​GitHub - Gsunshine/Enjoy-Hamburger: [ICLR 2021 top 3%] Is Attention Better Than Matrix Decomposition?[ICL…

苹果ios系统IPA包企业签名手机下载应用可以有几种方式可以下载到手机?

一、App Store签名:这是最常见和推荐的苹果签名方式。用户可以通过苹果的官方应用商店App Store下载并安装经过苹果审核的应用程序。这种签名方式确保了应用程序的安全性和可靠性,因为App Store对应用进行了严格的审核和验证。 二、企业签名:…

三、互联网技术——IP子网划分

文章目录 一、IP地址基础1.1 IP地址分类1.2 网络掩码/子网掩码 二、子网划分VLSM2.1 为什么要进行子网划分2.2 怎么进行子网划分2.3 子网划分原理2.4 例题一2.5 例题二2.6 例题三2.6 例题四2.7 例题五2.8 例题六2.9 例题七2.10 例题八 三、无类域间路由CIDR3.1 例题一3.2 例题二…

基于Android的英语学习软件/英语学习系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的APP应运而生,各行各业相继进入信息管理时代&#x…

扩散模型diffusion model 代码解读

代码来自这里 使用pytorch轻松实现简单扩散模型diffusion model(附可跑通全部代码) - 知乎 1.作者首先自己定义了一个数据集,也就是一堆散点,组成的S。 2.这些都是预先设置好的参数,也就是利用这些来做learning的提示…

国庆10.04

服务器 代码 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件 #include<QList> //链表容器 #include<QMessag…

数据结构与算法--算法

这里写目录标题 线性表顺序表链表插入删除算法 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 线性表 顺序表 链表 插入删除算法 步骤 1.通过循环到达指定位置的前一个位置 2.新建…

知网G4《基础教育论坛》期刊投稿邮箱

知网G4《基础教育论坛》期刊投稿邮箱 《基础教育论坛》文稿要求5000字符3版&#xff0c;查重率15%以下。 所有投稿必须在文后注明&#xff1a;作者姓名、性别、出生年&#xff08;如1968—&#xff09;、工作单位、通讯地址&#xff08;注明所在地及邮编&#xff09;。 对于科…

postgresql-物化视图

postgresql-物化视图 物化视图创建物化视图刷新物化视图修改物化视图删除物化视图 物化视图 创建物化视图 postgresql使用create materialized view 语句创建视图 create materialized view if not exists name as query [with [NO] data];-- 创建一个包含员工统计信息的物化…

Flink--8、时间语义、水位线(事件和窗口、水位线和窗口的工作原理、生产水位线、水位线的传递、迟到数据的处理)

星光下的赶路人star的个人主页 将自己生命力展开的人&#xff0c;他的存在&#xff0c;对别人就是愈疗 文章目录 1、时间语义1.1 Flink中的时间语义1.2 哪种时间语义更重要 2、水位线&#xff08;Watermark&#xff09;2.1 事件时间和窗口2.2 什么是水位线1.3 水位线和窗口的工…

竞赛 大数据商城人流数据分析与可视化 - python 大数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的基站数据分析与可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度…

SketchUp Pro 2023 for Mac——打造你的创意之城

SketchUp Pro 2023 for Mac是一款专业级的3D建模软件&#xff0c;为你提供最佳的设计和创意工具。不论你是建筑师、室内设计师&#xff0c;还是爱好者&#xff0c;SketchUp Pro都能满足你对于创意表达的需求。 SketchUp Pro 2023拥有强大而直观的界面&#xff0c;让你轻松绘制…

关于大小端的想法

一、课本上的内容 二、一些想法 之前一直只是做题&#xff0c;不具体了解大小端存在的意义。 应用中&#xff0c;网络字节序常使用大端模式&#xff0c;主机字节序常使用小端模式。 实际上&#xff0c;计算机常使用小端模式是因为小端的加法器比较好做。就比如要做一个 4 …

C++:stl:stack、queue、priority_queue介绍及模拟实现和容量适配器deque介绍

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

Docker-mysql,redis安装

安装MySQL 下载MySQL镜像 终端运行命令 docker pull mysql:8.0.29镜像下载完成后&#xff0c;需要配置持久化数据到本地 这是mysql的配置文件和存储数据用的目录 切换到终端&#xff0c;输入命令&#xff0c;第一次启动MySQL容器 docker run --restartalways --name mysq…