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

3步高效解锁智慧树自动化学习:技术原理解析与实战指南

3步高效解锁智慧树自动化学习:技术原理解析与实战指南 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 你是否厌倦了在智慧树平台上重复点击下一集、手动调节…...

5分钟掌握智慧树自动刷课:终极免费工具助你高效学习

5分钟掌握智慧树自动刷课:终极免费工具助你高效学习 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的繁琐视频学习而烦恼吗?智…...

如何快速实现MyBatis分页查询:PageHelper终极指南

如何快速实现MyBatis分页查询:PageHelper终极指南 【免费下载链接】Mybatis-PageHelper Mybatis通用分页插件 项目地址: https://gitcode.com/gh_mirrors/my/Mybatis-PageHelper 前言:在MyBatis项目中实现分页功能是每个开发者都会遇到的挑战&…...

FlowState Lab 赋能智能运维:服务器异常波动检测与根因分析

FlowState Lab 赋能智能运维:服务器异常波动检测与根因分析 1. 运维工程师的日常困境 凌晨三点,刺耳的告警铃声把张工从睡梦中惊醒。监控大屏上,核心业务集群的CPU使用率曲线像过山车一样剧烈波动。他揉了揉发红的眼睛,开始逐一…...

llama.cpp部署QWEN3.5-9B和Gemma4-e4b,用Claude Code对比测试

昨天部署了Gemma4:26B和E4B,一是自己显存不够,部署的时候总是爆显存。二是claude code与Gemma4配合有问题,claude爆内存,任务进行不下去。 所以今天我又通过llama.cpp部署了QWEN3.9-9B,并做了些测试。 结论&#xff1a…...

对话式革新:OpenClaw全场景实战指南(含CloudBase开发全流程\+生态深度解析)

在AI原生工具爆发的2026年,鹅厂OpenClaw以“文本驱动、本地优先、事件编排”的核心优势,打破了传统AI助手“只建议、不执行”的局限,从单一工具升级为覆盖办公、创作、学习、研发等多场景的生态体系。它并非简单的对话机器人,而是…...

保姆级教程:用Abaqus搞定气动软体抓手的仿真建模(从材料设置到结果提取)

从零到一:Abaqus气动软体抓手仿真实战指南 在软体机器人研究领域,气动抓手因其柔顺性和适应性成为热门方向。但许多初学者在仿真环节常被材料参数转换、接触设置收敛等"隐形门槛"绊住。本文将手把手带您突破这些瓶颈——从Yeoh模型参数导入到接…...

SVGSON:企业级SVG-JSON双向转换解决方案助力生产就绪的图形数据处理

SVGSON:企业级SVG-JSON双向转换解决方案助力生产就绪的图形数据处理 【免费下载链接】svgson Transform svg files to json notation 项目地址: https://gitcode.com/gh_mirrors/sv/svgson 如何解决SVG图形在程序化处理和存储中的格式转换挑战 问题导向&am…...

FlashDB移植教程:轻松适配STM32、ESP32等主流MCU

FlashDB移植教程:轻松适配STM32、ESP32等主流MCU 【免费下载链接】FlashDB An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库 项目地址: https://gitcode.com/gh_mirrors/fl/FlashDB …...

如何配置Oracle UTL_FILE目录_CREATE DIRECTORY语法与权限分配

必须由SYS或具CREATE ANY DIRECTORY权限的用户执行CREATE DIRECTORY;目录名是Oracle标识符,OS路径需oracle用户有读写权;UTL_FILE.FOPEN首参须为目录名而非OS路径;须GRANT READ/WRITE给具体用户;PDB中目录需在对应容器…...