MQ横向对比:RocketMQ、Kafka、RabbitMQ、ActiveMQ、ZeroMQ
前言
本文将从多个角度全方位对比目前比较常用的几个MQ:
- RocketMQ
- Kafka
- RabbitMQ
- ActiveMQ
- ZeroMQ将单独说明。
表格对比
特性 | RocketMQ | Kafka | RabbitMQ | ActiveMQ |
---|---|---|---|---|
单机吞吐量 | 10 万级,支撑高吞吐 | 10 几万级,吞吐量非常高,甚至有文献称,可以达到单机百万级TPS。 | 万级,同ActiveMQ | 万级,相对其他MQ较低。 |
topic 数量对吞吐量的影响 | topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic | topic从几十到几百个时候,吞吐量会大幅度下降,所以请不要给Kafka设计过多的topic,需要更多的机器资源支撑大规模的 topic | topic 数量增多,吞吐量会下降 | topic 数量增多,吞吐量会下降 |
时效性 | ms 级 | 延迟在 ms 级以内 | 微秒级,延迟最低RabbitMQ 的一大特点 | ms 级 |
可用性 | 非常高,分布式架构 | 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 | 同 ActiveMQ | 高,基于主从架构实现高可用 |
消息可靠性 | 经过参数优化配置,可以做到 0 丢失。支持事务 | 同 RocketMQ。支持事务 | 基本不丢 | 有较低的概率丢失数据 |
消息顺序性 | 分区内消息有序 | 分区内消息有序 | 队列的消息有序 | 队列消息有序,topic不保证。 |
消息延时 | 5.0开始支持,定时消息 | 插件支持 | 插件支持 | 支持,Scheduled Message |
功能支持 | MQ 功能较为完善,还是分布式的,扩展性好 | 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 | 基于 erlang 开发,并发能力很强,性能极好,延时很低 | MQ 领域的功能极其完备 |
资料文档 | 少。没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述 | 中,有kafka作者自己写的书,网上资料也有一些 | 多。有一些不错的书,网上资料多 | 多。没有专门写activemq的书,网上资料多 |
开发语言 | java | Scala+Java | Erlang | java |
支持协议 | 自定义 | 自定义(基于TCP) | AMQP | OpenWire、STOMP、REST、XMPP、AMQP |
消息存储 | 磁盘。支持大量堆积 | 内存、磁盘、数据库。支持大量堆积 | 内存、磁盘。支持少量堆积 | |
集群方式 | 常用多对’Master-Slave’ 模式,开源版本需手动切换Slave变成Master | 天然的‘Leader-Slave’无状态集群,每台服务器既是Master也是Slave | 支持简单集群,'复制’模式,对高级集群模式支持不好 | 支持简单集群模式,比如’主-备’,对高级集群模式支持不好 |
系统场景 | 电商系统,金融系统,物流系统 | 大数据处理平台(如 Hadoop、Spark) 流处理平台(如 Flink、Storm) 日志收集系统(如 ELK) | 网站通知系统 任务队列系统 微服务通信系统 | 传统企业应用(如 ERP、CRM) JMS 兼容系统 |
ZeroMQ
ZeroMQ优缺点
ZeroMQ 的优点:
- 轻量级和快速:ZeroMQ是一个轻量级的消息中间件,具有高性能和低延迟的特点,适用于需要快速消息传递的场景。
- 灵活的消息模型:ZeroMQ支持多种消息传递模式,如请求-应答、发布-订阅、推送-接收等,可以根据不同需求选择合适的模式。
- 无中心化架构:ZeroMQ没有中心服务器,消息传递是点对点的,这种无中心化的架构使得系统更具弹性和可伸缩性。
- 多语言支持:ZeroMQ提供了多种语言的绑定,如C++, Python, Java等,可以方便地在不同语言的应用中集成ZeroMQ。
- 多平台支持:ZeroMQ可以在多种操作系统上运行,包括Windows、Linux、MacOS等,使得跨平台开发变得更加容易。
- 简单易用:ZeroMQ的API设计简洁明了,使用起来相对容易,可以快速上手并构建复杂的消息传递系统。
- 开源和社区支持:ZeroMQ是开源项目,拥有活跃的社区支持,用户可以通过社区获得帮助、反馈和贡献。
ZeroMQ 的缺点:
- 复杂性:ZeroMQ 的 API 相对复杂,需要一定的时间来学习和掌握。
- 缺乏持久性:ZeroMQ 不提供消息持久化功能,一旦消息被消费就会丢失。
- 不支持事务:ZeroMQ 不支持分布式事务,因此不适用于需要保证消息原子性、一致性、隔离性和持久性的场景。
- 不支持高可用:ZeroMQ 本身不支持集群,需要使用第三方工具或库来实现。
ZeroMQ应用场景
- 分布式系统:构建分布式系统,实现不同组件之间的通信和消息传递。
- 实时数据处理:处理来自不同来源的实时数据,如传感器、日志和社交媒体流。
- 游戏开发:实现多人游戏中的玩家通信和数据同步。
- 金融交易系统:构建高吞吐量、低延迟的金融交易系统。
- 物联网:连接和管理物联网设备,实现数据采集和控制。
相关文章:
MQ横向对比:RocketMQ、Kafka、RabbitMQ、ActiveMQ、ZeroMQ
前言 本文将从多个角度全方位对比目前比较常用的几个MQ: RocketMQKafkaRabbitMQActiveMQZeroMQ将单独说明。 表格对比 特性RocketMQKafkaRabbitMQActiveMQ单机吞吐量10 万级,支撑高吞吐10 几万级,吞吐量非常高,甚至有文献称&a…...

html5cssjs代码 018颜色表
html5&css&js代码 018颜色表 一、代码二、效果三、解释 这段代码展示了一个基本的颜色表,方便参考使用,同时也应用了各种样式应用方式。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记…...

力扣刷题Days20-151. 反转字符串中的单词(js)
目录 1,题目 2,代码 1,利用js函数 2,双指针 3,双指针加队列 3,学习与总结 1,正则表达式 / \s /: 2,结合使用 split 和正则表达式: 1,题目 给你一个字符串 s &am…...

基于grafana+elk等开源组件的 云服务监控大屏架构
本套大屏,在某云服务大规模测试环境,良好运行3年. 本文主要展示这套监控大屏的逻辑架构.不做具体操作与配置的解释. 监控主要分为三部分: 数据展示部分数据存储数据采集 1. 数据展示 数据展示方面主要使用grafana 2. 数据存储 根据数据种类和特性和用途的不同,本套监控采用…...

PWM驱动舵机
PWM驱动舵机 接线图 程序结构图: pwm.c部分代码 #include "stm32f10x.h" // Device headervoid PWM_Init(void){// 开启时钟,这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// GPIO初始化代…...
处理Centos 7 中buff/cache高的问题
在CentOS 7中,如果发现 buff/cache 栏目的值过高占用了大量内存,可以尝试以下方法来释放部分缓存: 清理页面缓存 Linux内核会缓存最近使用过的内存页面,以提高访问速度。你可以使用以下命令清理页面缓存: sudo sync && sudo echo 1 > /proc/sys/vm/drop_caches …...

【送书福利第五期】:ARM汇编与逆向工程
文章目录 📑前言一、ARM汇编与逆向工程1.1 书封面1.2 内容概括1.3 目录 二、作者简介三、译者介绍🌤️、粉丝福利 📑前言 与传统的CISC(Complex Instruction Set Computer,复杂指令集计算机)架构相比&#…...

STM32的USART能否支持9位数据格式话题
1、问题描述 STM32L051 这款单片机。平常的 USART 串口传输是 8 位数据,但是他的项目需要用串口传输 9 位数据。当设置为 8 位数据时,串口响应中断正常。但是,当设置为 9 位数据时,串口就不产生中断了。USART2 的 ISR 寄存器 RXN…...

OLAP与数据仓库和数据湖
OLAP与数据仓库和数据湖 本文阐述了OLAP、数据仓库和数据湖方面的基础知识以及相关论文。同时记录了我如何通过ChatGPT以及类似产品(通义千问、文心一言)来学习知识的。通过这个过程让我对于用AI科技提升学习和工作效率有了实践经验和切身感受。 预热 …...

zookeeper快速入门三:zookeeper的基本操作
在zookeeper的bin目录下,输入./zkServer.sh start和./zkCli.sh启动服务端和客户端,然后我们就可以进行zookeeper的基本操作了。如果是windows,请参考前面章节zookeeper快速入门一:zookeeper安装与启动 目录 一、节点的增删改查 …...

oracle 19c打补丁到19.14
oracle 19c打补丁到19.14 oracle 19.3打补丁到19.14 查看oracle的版本: SQL> column product format A30 SQL> column version format A15 SQL> column version_full format A20 SQL> column status format A15 SQL> select * from product_compo…...

Spring Boot(六十九):利用Alibaba Druid对数据库密码进行加密
1 Alibaba Druid简介 之前介绍过Alibaba Druid的,章节如下,这里就不介绍了: Spring Boot(六十六):集成Alibaba Druid 连接池 这章使用Alibaba Druid进行数据库密码加密,在上面的代码上进行修改,这章只介绍密码加密的步骤。 目前越来越严的安全等级要求,我们在做产品…...

51单片机—DS18B20温度传感器
目录 一.元件介绍及原理 二,应用:DS18B20读取温度 一.元件介绍及原理 1.元件 2.内部介绍 本次元件使用的是单总线 以下为单总线的介绍 时序结构 操作流程 本次需要使用的是SKIP ROM 跳过, CONVERT T温度变化,READ SCRATCHPAD…...

Monorepo 解决方案 — 基于 Bazel 的 Xcode 性能优化实践
背景介绍 书接上回《Monorepo 解决方案 — Bazel 在头条 iOS 的实践》,在头条工程切换至 Bazel 构建系统后,为了支持用户使用 Xcode 开发的习惯,我们使用了开源项目 Tulsi 作为生成工具,用于将 Bazel 工程转换为 Xcode 工程。但是…...

Unity触发器的使用
1.首先建立两个静态精灵(并给其中一个物体添加"jj"标签) 2.添加触发器 3.给其中一个物体添加刚体组件(如果这里是静态的碰撞的时候将不会触发效果,如果另一个物体有刚体可以将它移除,或者将它的刚体属性设置…...

docker compose部署rabbitmq集群
docker compose 配置 假设有两台电脑 A电脑的ip为192.168.1.100 B电脑的ip为192.168.1.103 A电脑的docker compose 配置 version: 3services:rabbitmq:restart: alwaysimage: rabbitmq:3.9.18-managementcontainer_name: rabbitmq-node-1hostname: rabbit1extra_hosts:- &quo…...

数据结构/C++:红黑树
数据结构/C:红黑树 概念实现基本结构插入uncle为红色节点uncle为黑色节点 总代码展示 概念 红黑树是一种二叉搜索树,一般的二叉搜索会发生不平衡现象,导致搜索效率下降,于是学者们开始探索如何让二叉搜索树保持平衡,这…...

【LabVIEW FPGA入门】浮点数类型支持
如今,使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器,这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过…...

ffmpeg 滤镜实现不同采样率多音频混音
音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等! 在实际的音频开发中,要实现混音的流程如下: 因此我们的编码实现就分为五部分:寻找…...
UserTCP 传输数据时如何保证数据的可靠性?并以LabVIEW为例进行说明
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过多种机制保证数据的可靠性,确保数据在网络中从一端传输到另一端时,顺序正确且无误差。以下是TCP实现数据可靠性的一些关键机制: 1. 三…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...