常见MQ及类MQ对比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ
常见MQ及类MQ对比 基于Grok调研
Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ
- 关键点:
- Redis Pub/Sub 适合简单实时消息,但不持久化,消息可能丢失。
- Redis Stream 提供持久化,适合需要消息历史的场景,但扩展性有限。
- RocketMQ 高性能,适合分布式事务,但设置复杂。
- Kafka 吞吐量极高,适合大数据流处理,但部署复杂。
- RabbitMQ 灵活路由,适合微服务,但吞吐量低于 Kafka。
- 选择取决于系统规模、复杂度和现有技术栈。
对比与优缺点
技术概述:
- Redis Pub/Sub:基于发布/订阅的内存消息系统,适合实时通知。
- Redis Stream:提供持久化流,支持消费者组,适合事件溯源。
- RocketMQ:分布式消息队列,强于事务支持,适合金融场景。
- Kafka:分布式事件流,极高吞吐量,适合日志聚合。
- RabbitMQ:消息代理,支持多种协议,适合微服务通信。
优缺点对比(见下表):
| 特性 | Redis Pub/Sub | Redis Stream | RocketMQ | Kafka | RabbitMQ |
|---|---|---|---|---|---|
| 架构模型 | 发布/订阅,火速传递 | 流式日志,带持久化 | 分布式消息队列 | 分布式事件流 | 消息代理,支持多种协议 |
| 持久化 | 无,默认内存 | 支持持久化(AOF/RDB) | 支持磁盘持久化 | 强持久化,基于日志 | 支持持久化(磁盘) |
| 消息投递保证 | 无投递保证,消费者断连丢失 | 至少一次投递 | 至少一次,可配置精确一次 | 至少一次,可配置精确一次 | 至少一次,可配置精确一次 |
| 消息顺序 | 不保证 | 保证(单消费者组) | 部分保证(分区内有序) | 保证(分区内有序) | 保证(队列内有序) |
| 性能(吞吐量) | 高(百万消息/秒) | 高(略低于Pub/Sub) | 高(十万消息/秒) | 极高(百万消息/秒) | 中等(万-十万消息/秒) |
| 扩展性 | 受内存限制,垂直扩展为主 | 受内存限制,垂直扩展为主 | 分布式,水平扩展 | 分布式,水平扩展 | 分布式,水平扩展有限 |
| 路由能力 | 简单(基于频道) | 基于消费者组 | 灵活(主题/标签) | 基于主题/分区 | 强大(交换机/路由键) |
| 适用场景 | 实时通知,短生命周期消息 | 实时流处理,需持久化 | 高性能分布式消息 | 大规模流处理、日志聚合 | 复杂路由、可靠投递 |
| 运维复杂度 | 低 | 低 | 中等 | 高 | 中等 |
| 语言支持 | 广泛 | 广泛 | Java为主,社区扩展其他语言 | 广泛 | 广泛 |
系统类型选择建议
中小型系统:
- 如果消息不需持久化,优先选择 Redis Pub/Sub,简单高效。
- 需要持久化时,推荐 Redis Stream,轻量级,易于集成。
- 若需复杂路由,可选 RabbitMQ,但可能略显复杂。
分布式系统:
- 高吞吐量需求,推荐 Kafka,适合大规模流处理。
- 需要分布式事务,推荐 RocketMQ,金融场景优先。
- 微服务通信,推荐 RabbitMQ,灵活路由。
- 若已有 Redis 使用,可考虑 Redis Stream,但扩展性有限。
单体系统:
- 简单实时消息,优先 Redis Pub/Sub。
- 需要持久化,选 Redis Stream。
- 复杂消息需求,可选 RabbitMQ。
详细调研笔记
以下是关于 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 的深入分析,涵盖其技术特性、优缺点及适用场景,基于 2025 年 4 月 11 日的最新研究。
技术对比与分析
1. Redis Pub/Sub:
- 特性:基于发布/订阅的内存消息系统,消息立即推送,无持久化。
- 优点:
- 极低延迟,适合实时通知(如聊天、实时排行榜)。
- 简单易用,与 Redis 生态集成紧密,可作为缓存和消息系统双用。
- 性能高,吞吐量可达百万消息/秒。
- 缺点:
- 无持久化,消费者断连后消息丢失(Fire-and-Forget)。
- 无投递保证,不适合关键业务。
- 扩展性受限于内存,分布式场景需依赖 Redis Cluster。
- 适用场景:实时性要求高、消息丢失可容忍的场景,如状态更新、实时广播。
- 来源:StackShare Comparison、Educba Redis vs Kafka
2. Redis Stream:
- 特性:提供持久化流,支持消费者组,类似 Kafka 的消费模型。
- 优点:
- 支持持久化(AOF/RDB),消息可回溯。
- 低延迟,集成 Redis 生态,适合小型系统。
- 支持消费者组,实现负载均衡,适合事件流处理。
- 缺点:
- 受内存限制,数据量大时性能下降。
- 分布式扩展能力较弱,需依赖 Redis Cluster。
- 功能较简单,复杂路由或投递语义支持有限。
- 适用场景:需要持久化和消息回溯的实时流处理,如日志收集、事件溯源。
- 来源:DEV Community Article、AWS Kafka vs Redis
3. RocketMQ:
- 特性:分布式消息队列,支持事务消息,阿里开源,国内广泛使用。
- 优点:
- 高性能,吞吐量高,适合分布式系统。
- 支持分布式事务消息,适合金融、电商场景。
- 提供灵活的主题/标签路由机制,社区活跃。
- 缺点:
- 部署和运维较复杂,需管理 NameServer 和 Broker。
- 非 Java 生态支持稍弱,学习曲线较陡。
- 对中小型系统可能略显重型。
- 适用场景:高性能分布式消息传递,如订单处理、分布式事务。
- 来源:从分析中总结,基于其在金融场景的广泛应用。
4. Kafka:
- 特性:分布式事件流,极高吞吐量,适合大数据和流处理。
- 优点:
- 极高吞吐量,适合大规模分布式流处理。
- 强持久化,支持消息回溯,数据保留时间可配置。
- 分布式架构,水平扩展能力强,生态丰富(如 Kafka Connect、Stream API)。
- 缺点:
- 部署复杂,依赖 ZooKeeper(新版可移除),运维成本高。
- 延迟略高(毫秒级),不适合超低延迟场景。
- 对中小型系统可能过于重型,资源占用大。
- 适用场景:大数据、日志聚合、事件溯源、流处理。
- 来源:StackShare Comparison、Educba Redis vs Kafka
5. RabbitMQ:
- 特性:消息代理,支持 AMQP 等多种协议,灵活路由。
- 优点:
- 支持复杂路由(交换机/路由键),适合微服务通信。
- 可靠投递(支持 ACK、持久化),消息不丢失。
- 多协议支持(AMQP、MQTT、STOMP),语言兼容性好。
- 易于部署,管理工具丰富。
- 缺点:
- 吞吐量低于 Kafka 和 RocketMQ,性能瓶颈在持久化模式。
- 水平扩展能力有限,集群管理较复杂。
- 不适合大规模流处理或日志场景。
- 适用场景:微服务间异步通信、任务队列、复杂路由。
- 来源:AWS RabbitMQ vs Redis、StackShare Comparison
系统类型选择建议
中小型系统:
- 特点:系统规模较小,流量有限,开发和运维资源有限,追求简单易用。
- 推荐:
- Redis Pub/Sub:如果消息丢失可容忍(如实时通知、状态广播),简单高效,无需额外部署。
- Redis Stream:如果需要持久化和消息回溯(如日志、事件流),轻量级选择,集成 Redis 生态,维护成本低。
- RabbitMQ:如果需要可靠投递和复杂路由(如任务队列、微服务通信),部署简单。
- 不推荐:
- Kafka:对中小型系统过于复杂,资源占用高,运维成本不划算。
- RocketMQ:部署和配置复杂,中小型系统无需其分布式能力。
分布式系统:
- 特点:微服务或分布式设计,跨服务通信频繁,需考虑扩展性和可靠性。
- 推荐:
- RabbitMQ:适合分布式微服务,提供灵活路由和可靠投递,易于集成到中小型分布式系统。
- Redis Stream:如果系统规模较小,流量不高,且已有 Redis 使用,Stream 可作为轻量级消息队列。
- RocketMQ:如果对高性能和分布式事务有需求,且团队有 Java 背景,RocketMQ 是较佳选择。
- Kafka:适合大规模流处理需求,但对中小型分布式系统可能过重。
- 不推荐:
- Redis Pub/Sub:无持久化和投递保证,不适合分布式系统中关键业务。
单体系统:
- 特点:单一应用,通信需求简单,优先考虑开发效率和低维护成本。
- 推荐:
- Redis Pub/Sub:简单高效,适合非关键实时消息。
- Redis Stream:需要持久化时使用,兼顾性能和功能。
- RabbitMQ:需要可靠投递和任务队列时选择,配置简单。
- 不推荐:
- Kafka 和 RocketMQ:功能过剩,运维复杂,不适合单体架构。
其他注意事项
- 团队技术栈:如果团队熟悉 Redis,优先考虑 Redis Pub/Sub 或 Stream;Java 团队可考虑 RocketMQ 或 Kafka;RabbitMQ 对多语言支持友好。
- 云服务:中小型系统可考虑云托管消息队列(如 AWS SQS、Azure Service Bus、阿里云 RocketMQ),降低运维负担。
- 未来扩展:如果预计系统会快速增长,选择支持水平扩展的 RabbitMQ 或 RocketMQ;Kafka 适合长期大数据规划。
参考
- Kafka vs RabbitMQ vs Redis 差异比较
- 选择合适的消息工具:Redis Streams, Redis Pub/Sub, Kafka 等
- Redis vs Kafka 关键差异
- AWS Kafka vs Redis 比较
相关文章:
常见MQ及类MQ对比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ
常见MQ及类MQ对比 基于Grok调研 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 关键点: Redis Pub/Sub 适合简单实时消息,但不持久化,消息可能丢失。Redis Stream 提供持久化,适合需要消息历史的场景,但…...
Kaggle-Bag of Words Meets Bags of Popcorn-(二分类+NLP+Bert模型)
Bag of Words Meets Bags of Popcorn 题意: 有很多条电影评论记录,问你每一条记录是积极性的评论还是消极性的评论。 数据处理: 1.首先这是文件是zip形式,要先解压,注意sep ‘\t’。 2.加载预训练的 BERT 分词器 …...
Spring Boot 3 + SpringDoc:打造接口文档
1、背景公司 新项目使用SpringBoot3.0以上构建,其中需要对外输出接口文档。接口文档一方面给到前端调试,另一方面给到测试使用。 2、SpringDoc 是什么? SpringDoc 是一个基于 Spring Boot 项目的库,能够自动根据项目中的配置、…...
Json 在线格式化 - 加菲工具
Json 在线格式化 打开网站 加菲工具 选择“Json 在线格式化” 或者直接进入 https://www.orcc.top/tools/json 输入Json,点击左上角的“格式化”按钮 得到格式化后的结果...
React 列表渲染基础示例
React 中最常见的一个需求就是「把一组数据渲染成一组 DOM 元素」,比如一个列表。下面是我写的一个最小示例,目的是搞清楚它到底是怎么工作的。 示例代码 // 定义一个静态数组,模拟后续要渲染的数据源 // 每个对象代表一个前端框架…...
HarmonyOS-ArkUI V2装饰器: @Monitor装饰器:状态变量修改监听
Monitor作用 Monitor的作用就是来监听状态变量的值变化的。被Monitor修饰的函数,会在其对应监听的变量发生值的变化时,回调此函数,从而可以让您知道是什么值发生变化了,变化前是什么值,变化后是什么值。 V1版本的装饰器,有个叫@Watch的装饰器,其实也有监听变化的能力,…...
微信小程序文字混合、填充动画有效果图
效果图 .wxml <view class"text" style"--deg:{{deg}}deg;"><view>混合父级颜色</view> </view> <view class"fill {{status?action:}}">文字颜色填充</view> <button bind:tap"setStatus"…...
【计算机网络 | 第一篇】计算机网络基础知识
网络分层模型 1.OSI七层模型国际标准化组织提出的一个网络分层模型,总共有七层,其大体功能以及每一层分工如下所示: 每一层都专注做一件事,并且每一层都需要下一层提供的功能。 OSI七层模型七层结构体系清晰,理论完整…...
二叉树理论基础
二叉树种类 满二叉树:每个非叶子节点都有且只有两个子节点。 和完全二叉树:除了最底层外,其他各层都是满的;最底层的节点都集中在左侧。 二叉搜索树:对于任意节点 u,左子树上所有节 点的值都小于 u.val…...
再读bert(Bidirectional Encoder Representations from Transformers)
再读 BERT,仿佛在数字丛林中邂逅一位古老而智慧的先知。初次相见时,惊叹于它以 Transformer 架构为罗盘,在预训练与微调的星河中精准导航,打破 NLP 领域长久以来的迷雾。而如今,书页间跃动的不再仅是 Attention 机制精…...
uCOS3实时操作系统(系统架构和中断管理)
文章目录 系统架构中断管理ARM中断寄存器相关知识ucos中断机制 系统架构 ucos主要包含三个部分的源码: 1、OS核心源码及其配置文件(ucos源码) 2、LIB库文件源码及其配置文件(库文件,比如字符处理、内存管理࿰…...
图像预处理-图像噪点消除
一.基本介绍 噪声:指图像中的一些干扰因素,也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声和椒盐噪声。 滤波器:也可以叫做卷积核 - 低通滤波器是模糊,高通滤波器是锐化 - 低通滤波器就…...
6.数据手册解读—运算放大器(二)
目录 6、细节描述 6.1预览 6.2功能框图 6.3 特征描述 6.3.1输入保护 6.3.1 EMI抑制 6.3.3 温度保护 6.3.4 容性负载和稳定性 6.3.5 共模电压范围 6.3.6反相保护 6.3.7 电气过载 6.3.8 过载恢复 6.3.9 典型规格与分布 6.3.9 散热焊盘的封装 6.3.11 Shutdown 6.4…...
用 Deepseek 写的uniapp油耗计算器
下面是一个基于 Uniapp 的油耗计算器实现,包含 Vue 组件和页面代码。 1. 创建页面文件 在 pages 目录下创建 fuel-calculator 页面: <!-- pages/fuel-calculator/fuel-calculator.vue --> <template><view class"container"…...
thinkphp实现图像验证码
示例 服务类 app\common\lib\captcha <?php namespace app\common\lib\captcha;use think\facade\Cache; use think\facade\Config; use Exception;class Captcha {private $im null; // 验证码图片实例private $color null; // 验证码字体颜色// 默认配置protected $co…...
【k8s系列4】工具介绍
1、虚拟机软件 vmware workstation 2、shell 软件 MobaXterm 3、centos7.9 下载地址 (https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.374bf5adOaiFPW) 4、上网软件...
微博辐射源和干扰机
微波辐射源和干扰机是电子战和通信领域中的两个重要概念,它们在军事、民用及科研中具有广泛应用。以下是两者的详细解析及其相互关系: 1. 微波辐射源 定义: 微波辐射源是指能够主动发射微波(频率范围通常为 300 MHz&…...
计算机网络——网络模型
一、OSI七层模型 (1)客户端发送请求时 OSI 七层模型的运作流程 应用层(Application Layer) 用户通过浏览器输入URL(如https://example.com),根据协议类型(HTTP/HTTPS)确…...
Spark-SQL核心编程2
路径问题 相对路径与绝对路径:建议使用绝对路径,避免复制粘贴导致的错误,必要时将斜杠改为双反斜杠。 数据处理与展示 SQL 风格语法:创建临时视图并使用 SQL 风格语法查询数据。 DSL 风格语法:使用 DSL 风格语法查询…...
Java 序列化与反序列化终极解析
Java 序列化与反序列化终极解析 1. 核心概念 (1) 什么是序列化? 定义:将对象转换为字节流的过程(对象 → 字节) 目的: 持久化存储(如保存到文件) 网络传输(如RPC调用)…...
STM32单片机入门学习——第41节: [12-1] Unix时间戳
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.18 STM32开发板学习——第41节: [12-1] Unix时间戳 前言开发板说明引用解答和科普一…...
无人机自主导航与路径规划技术要点!
一、自主导航与路径规划技术要点 1. 传感器融合 GPS/北斗定位:提供全局定位,但在室内或遮挡环境下易失效。 惯性测量单元(IMU)**:通过加速度计和陀螺仪实时追踪姿态,弥补GPS信号丢失时的定位空缺。 …...
AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
在AI绘画StableDiffusion中,一直都有一个比较困难的问题,就是如何保证每次出图都是同一个人。今天就这个问题分享一些个人实践,大家和我一起来看看吧。 一. 有哪些实现方式 方式1:固定Seed种子值。 固定Seed种子值出来的图片人…...
java 设计模式 策略模式
简介 策略模式(Strategy Pattern)是一种行为设计模式,旨在定义一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端。换句话说,策略模式通过将不同的算法…...
std::set (C++)
std::set 1. 概述定义特点 2. 内部实现3. 性能特征4. 常用 API5. 使用示例6. 自定义比较器7. 注意事项与优化8. 使用建议 1. 概述 定义 template<class Key,class Compare std::less<Key>,class Allocator std::allocator<Key> > class std::set;特点 有…...
STM32 HAL 通用定时器延时函数
使用通用定时器TIM3,实现ms、us延时。 delay.c #include "delay.h" #include "stm32f1xx_hal.h"TIM_HandleTypeDef htim3;/*** brief 初始化定时器3用于延时* param 无* retval 无*/ void Delay_Init(void) {TIM_ClockConfigTypeDef sClock…...
RK3588S开发板将SPI1接口改成GPIO
参考官方教程:ROC-RK3588S-PC 一.基本知识: 1.GPIO引脚计算: ROC-RK3588S-PC 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:GPIO…...
PLOS ONE:VR 游戏扫描揭示了 ADHD 儿童独特的大脑活动
在孩子的成长过程中,总有那么一些“与众不同”的孩子。他们似乎总是坐不住,课堂上小动作不断,注意力难以集中,作业总是拖拖拉拉……这些行为常常被家长和老师简单地归结为“淘气”“不听话”。然而,他们可能并不只是“…...
DemoGen:用于数据高效视觉运动策略学习的合成演示生成
25年2月来自清华、上海姚期智研究院和上海AI实验室的论文“DemoGen: Synthetic Demonstration Generation for Data-Efficient Visuomotor Policy Learning”。 视觉运动策略在机器人操控中展现出巨大潜力,但通常需要大量人工采集的数据才能有效执行。驱动高数据需…...
极狐GitLab 账号限制有哪些?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 账户和限制设置 (BASIC SELF) 默认项目限制 您可以配置新用户能在其个人命名空间中创建的默认最大项目数。此限制仅影响更改…...
