【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…...
Linux下Python连接MySQL报错‘libstdc++.so.6: cannot allocate memory in static TLS block’的保姆级修复指南
Linux下Python连接MySQL报错‘libstdc.so.6: cannot allocate memory in static TLS block’的保姆级修复指南 最近在Linux服务器上部署Python应用时,不少开发者遇到了一个令人头疼的错误:当尝试通过mysqlclient连接MySQL数据库时,系统抛出li…...
QQ截图独立版终极指南:深度解析高效截图工具的技术架构与性能优化
QQ截图独立版终极指南:深度解析高效截图工具的技术架构与性能优化 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenShot …...
别再手动回微信了!用Python+WxAuto给电脑微信装个AI助理(支持ChatGPT/DeepSeek)
打造智能微信助手:PythonWxAuto实现24小时AI自动回复系统 微信已经成为现代人工作和生活中不可或缺的通讯工具,但对于忙碌的开发者、电商运营者或自由职业者来说,频繁的消息回复常常成为效率杀手。想象一下这样的场景:当你正在专…...
写段代码教会你什么是HOOK技术?HOOK技术能干什么?禾
为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...
Whisper-large-v3实战应用:视频字幕生成一键解决方案
Whisper-large-v3实战应用:视频字幕生成一键解决方案 1. 为什么需要自动视频字幕生成 视频内容正成为互联网信息传播的主流形式,但缺乏字幕的视频会损失大量潜在观众。传统字幕制作需要人工听写、时间轴对齐、文本校对,一个10分钟的视频可能…...
AI+3D视觉重塑金属圆棒自动化上下料:高精度、快节拍、降成本实战案例
在汽车、金属加工等核心制造领域,金属圆棒作为基础关键工件,其上下料环节的自动化水平直接决定产线效率与产品一致性。传统人工上下料存在强度大、效率低、精度波动、易损伤工件等痛点,而**AI3D视觉引导机器人**正成为破解该场景瓶颈的主流技…...
投放Facebook广告需要多少预算?又如何提升转化率?
随着这两年独立站市场的风靡,吸引了大量卖家的涌入。我们都知道,独立站不像平台是自带流量的,需要我们自己去推广引流。所以,我们在投放广告的时候,一定会优先考虑广告预算的问题。很多卖家也会问到:我们每…...
STEP3-VL-10B从零开始:Ubuntu环境部署+Gradio启动+API服务验证全流程
STEP3-VL-10B从零开始:Ubuntu环境部署Gradio启动API服务验证全流程 你是不是对多模态AI模型很感兴趣,想自己动手部署一个既能看懂图片又能和你聊天的智能助手?今天,我们就来一起搞定STEP3-VL-10B这个“小巨人”模型。 别看它只有…...
从“人海战术”到“算法军团”:TVA引发的劳动力革命(4)
——岗位重构:TVA时代,制造业劳动力的岗位迭代与技能升级TVA“算法军团”的普及,不仅替代了传统的体力型、重复型劳动力,更引发了制造业岗位体系的颠覆性重构——大量传统岗位被淘汰,一批全新岗位应运而生,…...
UEFI固件镜像解析:从FD到Section的逐层拆解
1. UEFI固件镜像解析入门指南 第一次拿到UEFI固件镜像时,很多人都会觉得无从下手。这个看似普通的二进制文件,实际上包含了计算机启动所需的所有关键代码。就像解剖人体需要了解骨骼结构一样,解析UEFI固件也需要先掌握它的层级架构。 我刚开始…...
