常用的消息中间件

devtools/2024/11/25 3:34:29/

下面是常用消息中间件 RabbitMQActiveMQKafkaRocketMQRedis(Pub/Sub 模式) 的消息队列调研文档,包括各自的特点、优缺点以及对比分析。

1. RabbitMQ

简介

RabbitMQ 是基于 AMQP 协议的开源消息队列,擅长复杂消息路由,提供插件支持和可靠的消息传递。

特点
  • 协议支持:支持 AMQP、MQTT、STOMP。
  • 路由机制:支持 direct、fanout、topic 和 headers 等多种交换机类型。
  • 消息可靠性:通过消息确认、持久化和死信队列保障可靠性。
  • 插件扩展:支持丰富的插件,如延迟队列和监控工具。
优点
  • 成熟稳定,社区活跃。
  • 支持复杂的消息路由。
  • 灵活配置消息持久化和确认机制。
  • 丰富的管理工具和监控功能。
缺点
  • 高并发下性能有限(约 10 万 TPS)。
  • 消息堆积时性能下降较为显著。
  • 运维和调优相对复杂。

2. ActiveMQ

简介

ActiveMQ 是 Apache 基金会维护的开源消息代理,完全兼容 JMS,支持多种协议。

特点
  • 协议支持:支持 JMS、AMQP、MQTT、OpenWire、STOMP。
  • 多种持久化选项:如 KahaDB 和 JDBC。
  • 兼容性:与 Java 生态和 JEE 集成良好。
优点
  • 完全支持 JMS 标准,适合 Java 应用。
  • 协议兼容性强,适用性广。
  • 入门门槛低,部署相对简单。
缺点
  • 性能和吞吐量低于其他主流中间件(约 1 万 TPS)。
  • 消息堆积时性能较差。
  • 扩展性有限,不适合高并发场景。

3. Kafka

简介

Kafka 是分布式流处理平台,专注于高吞吐量和实时数据流处理。

特点
  • 高吞吐量:每秒可处理百万级消息。
  • 分布式架构:支持水平扩展和高可用。
  • 消息持久化:默认持久化,可回溯消费。
  • 流处理支持:内置 Streams API 和 Connect 工具。
优点
  • 高吞吐量,适合大规模数据流处理。
  • 水平扩展能力强,分区机制高效。
  • 持久化默认开启,支持回溯消费。
  • 社区活跃,生态系统丰富。
缺点
  • 学习成本高,配置和运维复杂。
  • 消费模型相对复杂,不支持消息确认机制。
  • 适用于批量处理,低延迟场景表现一般。

4. RocketMQ

简介

RocketMQ 是阿里巴巴开源的分布式消息队列,支持事务消息和延迟队列。

特点
  • 事务支持:支持分布式事务消息。
  • 高吞吐量:优化后的高性能(约 20 万 TPS)。
  • 延迟队列:支持定时或延迟消息投递。
  • 分布式架构:支持水平扩展和高可用。
优点
  • 性能优异,吞吐量高。
  • 支持分布式事务和延迟消息。
  • 与主流大数据技术兼容。
  • 社区支持较好,适合电商和金融场景。
缺点
  • 配置较复杂,运维成本较高。
  • 社区和生态规模小于 Kafka 和 RabbitMQ。
  • 延迟队列功能适用场景有限。

5. Redis(Pub/Sub 模式)

简介

Redis 的 Pub/Sub 提供了轻量级的消息发布与订阅功能,性能优异但功能有限。

特点
  • 轻量级:无需额外配置,即可支持消息队列功能。
  • 实时性:消息延迟极低。
  • 无持久化:Pub/Sub 模式不保存历史消息。
优点
  • 简单易用,零配置即可使用。
  • 极低的消息延迟,性能优异(单实例百万级 TPS)。
  • 适合轻量级实时通信场景。
缺点
  • 无持久化,消息无法回溯。
  • 无高级功能(如消息确认、死信队列)。
  • 消息队列功能较弱,扩展性有限。

6. 对比分析

特性RabbitMQActiveMQKafkaRocketMQRedis(Pub/Sub)
协议支持AMQP、MQTT、STOMPJMS、AMQP、MQTT、STOMP原生协议原生协议、部分支持 JMS
吞吐量中等(~10 万 TPS)较低(~1 万 TPS)高(~百万 TPS)高(~20 万 TPS)极高(单实例百万 TPS)
消息持久化支持,需配置支持,性能较差默认持久化默认持久化不支持
可靠性高,支持确认机制中,可靠性依赖配置高,默认多副本持久化高,支持事务消息较低
延迟中等较高中等极低
扩展性较好,支持集群一般,扩展性有限极强,分布式设计较强较弱
适用场景复杂路由、企业应用小型项目、传统企业应用实时流处理、大数据电商、金融、分布式事务轻量级实时通信

7. 选择建议

  • RabbitMQ:适用于中小型企业需要可靠消息传递和复杂路由的场景,尤其是支持 AMQP 协议的系统。
  • ActiveMQ:适合轻量级 Java 应用集成,需求简单且吞吐量不高的场景。
  • Kafka:是高吞吐量和实时流处理的首选,适用于大数据、日志收集和事件驱动架构。
  • RocketMQ:适合对延迟和性能要求高的场景,如电商订单系统、分布式事务消息。
  • Redis(Pub/Sub 模式):适用于对延迟敏感、功能简单的实时通信场景,如在线聊天、实时通知。


http://www.ppmy.cn/devtools/136734.html

相关文章

logback 初探学习

logback 三大模块 记录器(Logger)、追加器(Appender)和布局(Layout) 配置文件外层最基本的标签如图示 xml中定义的就是这个三个东西下面进入学习 包引入参考springboot 官方文档 Logging :: Spring Boo…

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意,我们使用的是Mac,所以ios pack并不能使用。 如何嫌官网上下载比较慢的话,可以考虑在csdn网站上下载,应该也是可以找到的。 2、cmake的下载 官网的链接&…

C 语言复习总结记录二

C 语言复习总结记录二 一 控制语句 1、语句的分类 表达式语句函数调用语句复合语句控制语句空语句 控制语句 控制程序的执行流程,实现程序的各种结构方式 C 语言支持三种结构 :顺序结构、选择结构、循环结构,由特定的语句定义符组成C语言…

魔众题库系统 v10.0.0 客服条、题目导入、考试导航、日志一大批更新

魔众题库系统基于PHP开发,可以用于题库管理和试卷生成软件,拥有极简界面和强大的功能,用户遍及全国各行各业。 魔众题库系统发布v10.0.0版本,新功能和Bug修复累计30项,客服条、题目导入、考试导航、日志一大批更新。 …

Easyexcel(5-自定义列宽)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽) 注解 ColumnWidth Data…

《线性代数的本质》

之前收藏的一门课,刚好期末复习,顺便看一看哈哈 课程链接:【线性代数的本质】合集-转载于3Blue1Brown官方双语】 向量究竟是什么 线性代数中最基础、最根源的组成部分就是向量,需要先明白什么是向量 不同专业对向量的看法 物理专…

动态规划 详解

动态规划(Dynamic Programming, DP)详解 动态规划是一种通过分解问题为子问题并利用子问题的解来解决原问题的算法设计方法。它通常用于解决具有 重叠子问题 和 最优子结构 性质的问题。 1. 动态规划的核心思想 1.1 重叠子问题 问题可以分解为多个子问…

QT 实现表格展示第一列为CheckBox(复选框)

1.界面实现效果 在Qt中,如果你想要在QTableView中实现复选框展示数据,示例:实现第一列为复选框(checkBox),需要自定义的QAbstractTableModel,重写data和setData方法来返回和设置复选框的状态,并且还需要重写flags方法来允许复选框被点击。 2.自定义CustomModel 需要实…