当前位置: 首页 > news >正文

【Kafka】【二】消息队列的流派

消息队列的流派

⽬前消息队列的中间件选型有很多种:

  • rabbitMQ:内部的可玩性(功能性)是⾮常强的
  • rocketMQ: 阿⾥内部⼀个⼤神,根据kafka的内部执⾏原理,⼿写的⼀个消息队列中间
    件。性能是与Kafka相⽐肩,除此之外,在功能上封装了更多的功能。
  • kafka:全球消息处理性能最快的⼀款MQ
  • zeroMQ

这些消息队列中间件有什么区别?

什么是消息队列

Message Queue(MQ),消息队列中间件。很多⼈都说:MQ 通过将消息的发送和接收分
离来实现应⽤程序的异步和解偶,这个给⼈的直觉是——MQ 是异步的,⽤来解耦的,但是
这个只是 MQ 的效果⽽不是⽬的。MQ 真正的⽬的是为了通讯,屏蔽底层复杂的通讯协议,
定义了⼀套应⽤层的、更加简单的通讯协议。⼀个分布式系统中两个模块之间通讯要么是
HTTP,要么是⾃⼰开发的(rpc) TCP,但是这两种协议其实都是原始的协议。HTTP 协议很
难实现两端通讯——模块 A 可以调⽤ B,B 也可以主动调⽤ A,如果要做到这个两端都要背上
WebServer,⽽且还不⽀持⻓连接(HTTP 2.0 的库根本找不到)。TCP 就更加原始了,粘
包、⼼跳、私有的协议,想⼀想头⽪就发麻。MQ 所要做的就是在这些协议之上构建⼀个简
单的“协议”——⽣产者/消费者模型。MQ 带给我的“协议”不是具体的通讯协议,⽽是更⾼层次
通讯模型。它定义了两个对象——发送数据的叫⽣产者;接收数据的叫消费者, 提供⼀个
SDK 让我们可以定义⾃⼰的⽣产者和消费者实现消息通讯⽽⽆视底层通讯协议

有 Broker 的 MQ

这个流派通常有⼀台服务器作为 Broker,所有的消息都通过它中转。⽣产者把消息发送给它
就结束⾃⼰的任务了,Broker 则把消息主动推送给消费者(或者消费者主动轮询)

重 Topic

kafka、JMS(ActiveMQ)就属于这个流派,⽣产者会发送 key 和数据到 Broker,由 Broker
⽐较 key 之后决定给哪个消费者。这种模式是我们最常⻅的模式,是我们对 MQ 最多的印
象。在这种模式下⼀个 topic 往往是⼀个⽐较⼤的概念,甚⾄⼀个系统中就可能只有⼀个
topic,topic 某种意义上就是 queue,⽣产者发送 key 相当于说:“hi,把数据放到 key 的队
列中”

如上图所示,Broker 定义了三个队列,key1,key2,key3,⽣产者发送数据的时候会发送
key1 和 data,Broker 在推送数据的时候则推送 data(也可能把 key 带上)。

虽然架构⼀样但是 kafka 的性能要⽐ jms 的性能不知道⾼到多少倍,所以基本这种类型的
MQ 只有 kafka ⼀种备选⽅案。如果你需要⼀条暴⼒的数据流(在乎性能⽽⾮灵活性)那么
kafka 是最好的选择

轻 Topic

这种的代表是 RabbitMQ(或者说是 AMQP)。⽣产者发送 key 和数据,消费者定义订阅的
队列,Broker 收到数据之后会通过⼀定的逻辑计算出 key 对应的队列,然后把数据交给队列
这种模式下解耦了 key 和 queue,在这种架构中 queue 是⾮常轻量级的(在 RabbitMQ 中
它的上限取决于你的内存),消费者关⼼的只是⾃⼰的 queue;⽣产者不必关⼼数据最终给
谁只要指定 key 就⾏了,中间的那层映射在 AMQP 中叫 exchange(交换机)。
AMQP 中有四种 exchange

  • Direct exchange:key 就等于 queue
  • Fanout exchange:⽆视 key,给所有的 queue 都来⼀份
  • Topic exchange:key 可以⽤“宽字符”模糊匹配 queue
  • Headers exchange:⽆视 key,通过查看消息的头部元数据来决定发给那个
    queue(AMQP 头部元数据⾮常丰富⽽且可以⾃定义)

这种结构的架构给通讯带来了很⼤的灵活性,我们能想到的通讯⽅式都可以⽤这四种
exchange 表达出来。如果你需要⼀个企业数据总线(在乎灵活性)那么 RabbitMQ 绝对的值
得⼀⽤

⽆ Broker 的 MQ

⽆ Broker 的 MQ 的代表是 ZeroMQ。该作者⾮常睿智,他⾮常敏锐的意识到——MQ 是更⾼
级的 Socket,它是解决通讯问题的。所以 ZeroMQ 被设计成了⼀个“库”⽽不是⼀个中间件,
这种实现也可以达到——没有 Broker 的⽬的

节点之间通讯的消息都是发送到彼此的队列中,每个节点都既是⽣产者⼜是消费者。ZeroMQ
做的事情就是封装出⼀套类似于 Socket 的 API 可以完成发送数据,读取数据

ZeroMQ 其实就是⼀个跨语⾔的、重量级的 Actor 模型邮箱库。你可以把⾃⼰的程序想象成
⼀个 Actor,ZeroMQ 就是提供邮箱功能的库;ZeroMQ 可以实现同⼀台机器的 RPC 通讯也
可以实现不同机器的 TCP、UDP 通讯,如果你需要⼀个强⼤的、灵活、野蛮的通讯能⼒,别
犹豫 ZeroMQ

相关文章:

【Kafka】【二】消息队列的流派

消息队列的流派 ⽬前消息队列的中间件选型有很多种: rabbitMQ:内部的可玩性(功能性)是⾮常强的rocketMQ: 阿⾥内部⼀个⼤神,根据kafka的内部执⾏原理,⼿写的⼀个消息队列中间 件。性能是与Kaf…...

现代 cmake (cmake 3.x) 操作大全

cmake 是一个跨平台编译工具,它面向各种平台提供适配的编译系统配置文件,进而调用这些编译系统完成编译工作。cmake 进入3.x 版本,指令大量更新,一些老的指令开始被新的指令集替代,并加入了一些更加高效的指令/参数。本…...

how https works?https工作原理

简单一句话: https http TLShttps 工作原理:HTTPS (Hypertext Transfer Protocol Secure)是一种带有安全性的通信协议,用于在互联网上传输信息。它通过使用加密来保护数据的隐私和完整性。下面是 HTTPS 的工作原理:初始化安全会…...

Docker的资源控制管理

目录 一、CPU控制 1、设置CPU使用率上限 2、设置CPU资源占用比(设置多个容器时才有效) 3、设置容器绑定指定的CPU 二、对内存使用进行限制 1、创建指定物理内存的容器 2、创建指定物理内存和swap的容器 3、 对磁盘IO配额控制(blkio&a…...

MMSeg无法使用单类自定义数据集训练

文章首发及后续更新:https://mwhls.top/4423.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 摘要:将三通道图像转为一通道图像,…...

Redis使用方式

一、Redis基础部分: 1、redis介绍与安装比mysql快10倍以上 *****************redis适用场合**************** 1.取最新N个数据的操作 2.排行榜应用,取TOP N 操作 3.需要精确设定过期时间的应用 4.计数器应用 5.Uniq操作,获取某段时间所有数据排重值 6.实时系统,反垃圾系统7.P…...

无主之地3重型武器节奏评分榜(9.25) 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播

无主之地3重型武器节奏评分榜(9.25) 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播者 发射巨大能量球,能量球会额外生成追踪附近敌人的伴生弹 全属性 SSS SSS SSS - T0 伊甸6号-…...

什么是编程什么是算法

1.绪论 编程应在一个开发环境中完成源程序的编译和运行。首先,发现高级语言开发环境,TC,Windows系统的C++,R语言更适合数学专业的学生。然后学习掌握编程的方法,在学校学习,有时间的人可以在网上学习,或者购买教材自学。最后,编写源程序,并且在开发环境中实践。 例如…...

【c++】函数

文章目录函数的定义函数的调用值传递常见样式函数的声明函数的分文件编写函数的作用: 将一段经常使用的代码封装起来,减少重复代码。 一个较大的程序,一般分为若干个程序块,每个模板实现特定的功能。 函数的定义 返回值类型 函数…...

[golang gin框架] 1.Gin环境搭建,程序的热加载,路由GET,POST,PUT,DELETE

一.Gin 介绍Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者,推荐你使用 Gin 框架.Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这…...

【开源】祁启云网络验证系统V1.11

简介 祁启云免费验证系统 一个使用golang语言、Web框架beego、前端Naive-Ui-Admin开发的免费网络验证系统 版本 当前版本1.11 更新方法 请直接将本目录中的verification.exe/verification直接覆盖到你服务器部署的目录,更新前,请先关闭正在运行的验…...

震源机制(Focal Mechanisms)之沙滩球(Bench Ball)

沙滩球包含如下信息: a - 判断断层类型,可根据球的颜色快速判断 b - 判断断层的走向(strike),倾角(dip) c - 确定滑移角/滑动角(rake) 走向 ,倾角,滑移角 如不了解断层的定义,可以先阅读:震…...

C++入门:多态

多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。1、纯虚函数声明如下: virtual void funtion1()0; 纯…...

华为OD真题_工位序列统计友好度最大值(100分)(C++实现)

题目描述 工位由序列F1,F2…Fn组成,Fi值为0、1或2。其中0代表空置,1代表有人,2代表障碍物。 1、某一空位的友好度为左右连续老员工数之和 2、为方便新员工学习求助,优先安排友好度高的空位 给出工位序列,求所有空位中友好度的最大值。 输入描述 第一行为工位序列:F1,F…...

[ruby on rails]MD5、SHA1、SHA256、Base64、aes-128-cbc、aes-256-ecb

md5 puts Digest::MD5.hexdigest(admin) sha1 require digest/sha1 puts Digest::SHA1.hexdigest(admin)base64 require base64 code Base64.encode64(admin) source Base64.decode64(code)aes-128-cbc # base64 解密数据 session_key Base64.decode64(session_ke…...

《NFL星计划》:拉斯维加斯突袭者·橄榄1号位

拉斯维加斯袭击者(英语: Las Vegas Raiders)又译拉斯维加斯侵略者或拉斯维加斯突击者,是一支主场位于美国内华达州拉斯维加斯的职业美式橄榄球球队,属全国橄榄球联盟 (NFL) 的美国橄榄球联合会 (AFC) 西区。实际上&…...

韩顺平Linux基础学习(1)

内容概括...

Rust学习入门--【6】Rust 基础语法

Rust 基础语法 变量,数据类型,注释,函数和控制流,这些是大部分编程语言都具有的编程概念。 本节将学习理解这些概念。 变量 Rust 是强类型语言,但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。…...

LINUX提权入门手册

前言 发点存货 LINUX权限简介 在学习提权之前我们先了解一下linux里面的权限我们使用命令: ls -al即可查看列出文件所属的权限: 文件头前面都有一段类似的字符,下面我们仔细分析一下里面符号分别代表什么。 -rw-r--r-- 1 root root 第一个符号-的…...

MSI_MSI-X中断之源码分析

MSI_MSI-X中断之源码分析 文章目录MSI_MSI-X中断之源码分析一、 怎么发出MSI/MSI-X中断1.1 在RK3399上体验1.1.1 安装工具1.1.2 查看设备MSI-X信息1.1.3 验证MSI-X信息二、 怎么使用MSI/MSI-X三、 MSI/MSI-X中断源码分析3.1 IRQ Domain创建流程3.1.1 GIC3.1.2 ITS3.1.3 PCI MSI…...

Docker Compose实战:一键部署OpenClaw项目与环境管理

1. 项目概述:一个为OpenClaw项目量身定制的Docker助手 如果你正在折腾一个名为OpenClaw的开源项目,并且被它复杂的依赖环境、繁琐的配置步骤搞得焦头烂额,那么你很可能需要“vivganes/openclaw-docker-helper”这个工具。简单来说&#xff0…...

GraphRAG 深度解析:把知识图谱接进检索链路,多跳推理准确率从 50% 提到 85%

很多同学搭完向量 RAG 之后,调了无数遍 Chunk 大小、换了好几个 Embedding 模型,多跳推理准确率就是卡在 50% 左右,怎么都上不去。比如「A 公司 CTO 和 B 公司 CEO 到底有什么合作关系」这类问题,答案散落在三个文档里&#xff0c…...

基于MCP协议构建阿里云SLS日志AI查询助手:原理、部署与实战

1. 项目概述:当阿里云SLS遇上MCP如果你正在用阿里云日志服务(SLS)做日志分析,同时又想用上像Claude、Cursor这类AI编程助手来帮你写查询、分析数据,那你可能已经感受到了一个痛点:如何在AI助手和你的日志数…...

METSO A413150输出模块

METSO A413150 是美卓(Metso Automation)BIU 8 分布式控制系统中的一款输出模块,主要用于向现场执行机构输出模拟量控制信号。中间15个特点METSO A413150 提供8通道模拟量输出,适用于多路控制信号输出。该模块分辨率为16位&#x…...

【无人机控制】一维环境下LQR与PID控制在无人机悬停控制中的对比分析附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

三维姿态表达:从欧拉角、旋转矩阵到四元数的工程实践

1. 三维姿态表达的基础概念 在三维空间中描述物体的姿态(orientation)是许多工程领域的核心需求,无论是卫星姿态控制、机器人运动规划,还是游戏开发中的角色动画,都需要精确的姿态表达方式。姿态描述的本质是回答一个问…...

被论文压到喘不过气?Paperxie 本科论文功能,把你的毕业节奏拉回正轨

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 毕业季的焦虑,一半来自答辩,一半来自毕业论文。选题卡壳、文献找不全、格式改到崩溃、写了…...

Grid++Report设计器避坑指南:搞不定自动换行和字体缩小?看这篇就够了

GridReport设计器避坑指南:搞不定自动换行和字体缩小?看这篇就够了 当你面对一份需要展示长商品描述、多行地址或其他复杂文本的报表时,是否曾被GridReport的自动换行和字体缩小功能折磨得焦头烂额?作为一款功能强大的报表设计工具…...

二供泵站设备全生命周期管理系统方案

在城镇居民二次供水管理体系中,泵房分散于各小区及大型建筑,管理部门长期面临“监管盲区、故障滞后、运维成本高”的突出矛盾。由于缺乏统一的远程监控手段,水泵运行状态、进出水压力、水箱液位、变频器参数等关键数据无法实时获取&#xff0…...

JetBrains IDE试用期重置工具:30天免费试用无限续杯指南

JetBrains IDE试用期重置工具:30天免费试用无限续杯指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否遇到过JetBrains IDE试用期到期,却还没准备好购买许可证的困扰?i…...