当前位置: 首页 > 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…...

Qwen3-ASR-0.6B垂直场景:方言保护项目中的粤语/闽南语识别实践

Qwen3-ASR-0.6B垂直场景:方言保护项目中的粤语/闽南语识别实践 方言保护面临的最大挑战是什么?不是没有人会说,而是年轻一代听不懂、不会说。当地方言正在以惊人的速度消失,而语音识别技术为我们提供了一种全新的保护方式。 1. 方…...

Jimeng AI Studio效果展示:Z-Image-Turbo生成3D渲染风格图像

Jimeng AI Studio效果展示:Z-Image-Turbo生成3D渲染风格图像 1. 惊艳的3D渲染效果展示 Jimeng AI Studio基于Z-Image-Turbo引擎,在3D渲染风格图像生成方面展现出了令人印象深刻的能力。这个轻量级工具不仅生成速度快,更重要的是能够产出具有…...

YonSuite如何用“本体智能”破解企业AI落地困局

2026年4月10日,2026成长型企业数智化创新峰会北京站顺利启幕,核心主题就是“本体智能 成长无界——YonSuite让AI在企业落地”。这场由用友YonSuite主办的峰会,聚集了不少行业专家、技术达人以及数百位企业管理者,趁着AI从“演示试…...

Mipmap实战解析:从纹理闪烁到视觉平滑的渲染优化之路

1. 纹理闪烁的罪魁祸首:当像素与纹素相爱相杀 第一次在开放世界游戏中看到远处山体像癫痫发作般疯狂闪烁时,我差点以为显卡要烧了。这种被称为"纹理闪烁"的现象,本质上是像素与纹素的比例失衡导致的视觉灾难。想象你站在纽约帝国大…...

从DDR4到DDR5,我的PCB布线避坑血泪史:信号、电源、时序一个都不能错

从DDR4到DDR5的PCB设计实战:一位工程师的避坑指南 第一次拿到DDR5的设计需求时,我自信满满地以为这不过是DDR4的"小升级版"。直到项目进入调试阶段,那些诡异的信号完整性问题、莫名其妙的时序错误和电源噪声导致的随机崩溃&#xf…...

MLX‑VLM :Mac本地跑通多模态大模型的开源项目!让图片、音频、视频理解一键上手

目录 一、MLX‑VLM到底是什么? 二、核心亮点:Mac本地多模态自由 1. 全模态支持:看、听、读全都行 2. 性能拉满:苹果芯片深度优化 1) Qwen3.5‑4B‑4bit(128k 上下文) 2) gemma‑4‑31b‑it&#xff0…...

QT+FastDDS实战:手把手教你搭建ROS2风格通信模块(附避坑指南)

QTFastDDS实战:从零构建工业级通信模块的完整指南 在智能驾驶和机器人开发领域,可靠高效的进程间通信是系统设计的核心挑战。本文将带您深入探索如何将FastDDS深度集成到QT项目中,打造一个兼具ROS2通信风格和工业级稳定性的解决方案。 1. 环境…...

基于改进YOLO11算法的芯片微缺陷检测系统(UI界面+数据集+分析界面+处置建议+训练代码)

摘要:芯片制造过程中的微小缺陷(5-7像素)检测是质量控制的关键环节,但现有目标检测算法在处理此类微小目标时存在特征信息丢失、检测精度低和漏检率高等问题。针对上述问题,本文提出了一种基于YOLO11的改进检测方法YOL…...

springboot高校报修与互助平台小程序(文档+源码)_kaic

5统详细设计5.1学生功能模块高校报修与互助平台小程序,在系统首页可以查看首页、我的(基本信息、收藏、学生文章、宿舍报修、室内报修、室外报修、网络报修、求助信息、用户反馈)等内容,如图5-1所示。图5-1系统首页界面图学生文章…...

Gilisoft Total Repair(全能修复大师)

链接:https://pan.quark.cn/s/a8e8b547d1f9Gilisoft Total Repair是一款功能强大的文件修复软件,中文又被成为“全能修复大师”,具有一键式智能修复引擎,可以自动解决500多个常见问题,如系统延迟、游戏崩溃和文件损坏。…...