消息中间件---初识(Kafka、RocketMQ、RabbitMQ、ActiveMQ、Redis)
1. 简介
消息中间件是一种支撑性软件系统,它在网络环境中为应用系统提供同步或异步、可靠的消息传输。消息中间件利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。它支持多种通信协议和数据格式,可以在不同的应用系统之间进行透明的消息传递。
消息中间件的主要特点包括异步通信、持久化、削峰填谷、系统解耦、集群扩展、负载均衡等。它适用于需要可靠数据传送的分布式环境,如金融行业,可以用于处理高并发交易、降低系统耦合度并提高系统的可用性和可扩展性。
在实际应用场景中,消息中间件可以用于异步处理、应用解耦、流量削峰、日志处理和数据流处理等。例如,在用户注册后发送邮件和短信的场景中,可以通过消息队列异步处理这些任务,从而加快响应速度并提高系统性能。在流量削峰方面,消息中间件可以将大量用户请求缓存起来,系统可以根据自身的最大处理能力从消息队列中间件中主动消费数据进行处理,从而提高系统的稳定性。
常见的消息中间件产品包括 RabbitMQ、Kafka、ActiveMQ 、RocketMQ等。在选择消息中间件时,需要考虑性能、可靠性、易用性和开放性等因素。例如,Kafka 适合需要高吞吐量和稳定性的大数据处理场景,而 RabbitMQ 适用于业务平稳、不需要频繁改源码的场景。
消息中间件的架构通常包括消息通道、消息总线、发布/订阅模型等。它可以通过通道将客户端和服务端连接起来,使他们可以交换消息,或者通过消息总线将不同的服务连接起来,允许它们异步传递数据。
2. 比较
以下是使用表格形式对几种常见消息中间件的比较:
| 特性/中间件 | Kafka | RabbitMQ | RocketMQ | Redis | ActiveMQ | 
| 消息模型 | 发布/订阅、点对点 | 点对点、发布/订阅 | 发布/订阅、点对点 | 发布/订阅 | 点对点、发布/订阅 | 
| 适用场景 | 日志收集、流处理、大数据处理 | 企业级消息传递、实时系统 | 大规模分布式系统、高吞吐量消息传递 | 轻量级消息传递、缓存 | 企业级应用、需要JMS支持的场景 | 
| 吞吐量 | 高 | 中 | 高 | 低(小数据量) | 中 | 
| 延迟 | 较高 | 较低 | 较低 | 低 | 较低 | 
| 可用性 | 高(分布式架构) | 高(镜像队列) | 高(主从架构) | 取决于配置 | 高(集群部署) | 
| 可靠性 | 高(多副本、ISR机制) | 高(持久化、消息确认) | 高(刷盘、主从复制) | 取决于配置 | 高(持久化、集群) | 
| 持久化 | 支持 | 支持 | 支持 | 支持 | 支持 | 
| 消息回溯 | 支持 | 支持 | 支持 | 不支持 | 支持 | 
| 消息堆积 | 支持 | 支持 | 支持 | 支持(有限) | 支持 | 
| 协议支持 | 自定义 | AMQP、STOMP等 | 自定义 | 自定义 | JMS、OpenWire等 | 
| 开发语言 | Scala/Java | Erlang | Java | C/C++/Python/PHP等 | Java | 
| 社区活跃度 | 高 | 高 | 高 | 非常高 | 高 | 
| 运维管理 | 有专用工具如Confluent | 有管理界面和插件 | CLI工具 | 简单 | 有管理界面 | 
这个表格只是一个简单的比较,实际情况可能会因为不同版本和配置的不同而有所变化。每种消息中间件都有其特定的优势和劣势,选择时应根据具体的业务需求和技术栈进行综合考虑。
3. 模型架构
3.1 Kafka

-  Producer:消息的发送者,负责产生消息并发送到Kafka集群。 
-  Topic:消息的分类,Kafka中的消息以Topic为单位进行分类。 
-  Broker:Kafka中的服务器节点,负责处理生产者发送的消息,并存储到磁盘中。 
-  Partition:Topic中的一个子分区,用于实现消息的横向扩展。 
-  Consumer:消息的消费者,订阅Topic并消费消息。 
-  Zookeeper:Kafka集群的协调服务,负责管理Broker和Consumer的元数据信息,以及集群的协调工作。 
原理:Kafka的设计理念是高吞吐量和可扩展性。通过将Topic划分为多个Partition,分布在不同的Broker上,可以实现负载均衡和水平扩展。Zookeeper用于集群的元数据管理和协调,确保系统的高可用性。
3.2 RabbitMQ

-  Producer:消息的发送者。 
-  Exchange:消息交换机,根据路由规则将消息路由到不同的Queue。 
-  Queue:消息的存储队列,消费者从队列中获取消息。 
-  Consumer:消息的消费者。 
-  Federation:用于跨RabbitMQ集群的消息传递。 
原理:RabbitMQ通过Exchange和Queue的组合提供了灵活的路由功能。Exchange支持多种类型的路由规则,可以根据需要将消息路由到一个或多个Queue中。Federation允许跨集群的消息传递,增强了系统的扩展性。
3.3 RocketMQ

-  Producer Group:消息生产者组,负责发送消息。 
-  Broker:存储消息的服务节点。 
-  Consumer Group:消息消费者组,负责消费消息。 
-  NameServer:负责集群元数据的管理和路由信息的提供。 
原理:RocketMQ的设计目标是高吞吐量和大规模集群的管理。通过NameServer集群来管理Broker的元数据信息,实现了Broker的动态注册和发现。Producer Group和Consumer Group的设计使得消息的发送和消费可以并行处理,提高了系统的吞吐量。
3.4 ActiveMQ

-  Producer:消息的发送者。 
-  Broker:ActiveMQ中的服务器节点,负责处理消息。 
-  Storage:消息的持久化存储。 
-  Consumer:消息的消费者。 
原理:ActiveMQ提供了持久化消息的功能,确保消息不会因为系统故障而丢失。Broker负责消息的路由和分发。通过集群部署,ActiveMQ可以实现高可用性和负载均衡。
3.5 Redis

-  Producer:消息的发送者。 
-  Redis:作为消息中间件的Redis服务器,负责存储和传递消息。 
-  Consumer:消息的消费者。 
原理:Redis通过发布/订阅模式实现消息传递。Producer将消息发布到一个频道,Consumer订阅这个频道来接收消息。Redis的发布/订阅模式是无状态的,适合于简单的消息传递场景。
4. 适用场景
4.1 Kafka
适用场景:
-  日志收集:Kafka 常用于收集分布式系统中的日志信息。 
-  流处理:适用于实时流处理场景,如用户行为分析、实时监控等。 
-  事件源:在微服务架构中,Kafka 可以作为事件源,实现服务间的通信。 
-  大数据处理:与 Hadoop、Spark 等大数据处理框架集成,进行大批量数据的实时处理。 
最佳实践:
-  消息模型:使用 Partition 提高吞吐量,合理设置 Partition 数量以平衡负载。 
-  数据不均衡处理:避免数据倾斜,确保消息均匀分布到各个 Partition。 
-  监控:配置消息堆积数监控,以便在消息堆积时及时收到通知并处理。 
-  安全性:使用 SSL/TLS 加密数据传输,确保数据安全。 
-  资源控制:合理配置消费者线程数量和批量处理大小,以优化性能 。 
4.2 RabbitMQ
适用场景:
-  任务队列:适用于异步任务处理,如邮件发送、图片处理等。 
-  事件通知:实现事件驱动架构,进行事件的发布和订阅。 
-  应用解耦:通过消息队列实现服务间的松耦合。 
-  多服务通信:在分布式系统中,RabbitMQ 可以作为不同服务之间的通信桥梁。 
最佳实践:
-  消息持久化:确保重要消息不丢失,通过设置消息和队列的持久性。 
-  避免资源泄露:合理配置资源,避免长时间运行的事务。 
-  监控和调优:定期监控 RabbitMQ 的性能指标,并根据需要进行调优。 
-  使用合适的消息协议:根据业务需求选择合适的消息协议,如 AMQP、MQTT、STOMP 等。 
-  合理使用交换机:利用不同类型的交换机(direct、topic、fanout、headers)来路由消息 。 
4.3 RocketMQ
适用场景:
-  大规模分布式系统:适用于需要高吞吐量和大规模消息传递的场景。 
-  顺序消息:支持顺序消息的发送和消费,适用于需要保证消息顺序的业务场景。 
-  定时消息:支持定时消息的发送,适用于需要定时任务处理的场景。 
最佳实践:
-  消息发送:使用 Tag 和 Key 来标识消息子类型和唯一标识,方便消息过滤和问题定位。 
-  消息可靠性:对于关键业务,实现消息发送失败后的重试机制,确保消息可靠传输。 
-  消费幂等性:确保消费过程的幂等性,避免重复消费导致的问题。 
-  消费速度:通过增加消费并行度和批量消费来提高消费速度。 
-  消息堆积处理:在消息堆积时,可以选择重置位点跳过非重要消息 。 
4.4 ActiveMQ
适用场景:
-  JMS实现:作为 JMS 规范的实现,适用于需要 JMS 支持的场景。 
-  企业级应用:适用于需要高可靠性和集群支持的企业级应用。 
最佳实践:
-  消息持久化:确保重要消息不丢失,通过设置消息持久化。 
-  集群部署:通过集群部署提高 ActiveMQ 的可用性和可靠性。 
-  监控:监控 ActiveMQ 的性能指标,及时发现和解决问题。 
-  安全性:配置适当的安全措施和权限控制策略,确保 ActiveMQ 的安全性 。 
4.5 Redis
适用场景:
-  缓存:作为内存缓存,提高数据访问速度。 
-  消息队列:使用 Redis 的发布/订阅功能实现简单的消息队列。 
-  计数器:实现高并发下的原子操作,如计数器、限流等。 
最佳实践:
-  内存优化:控制 key 的长度,避免存储 bigkey,选择合适的数据类型。 
-  性能优化:避免复杂度高的命令,使用长连接操作 Redis。 
-  可靠性:设置合理的 maxmemory 和淘汰策略,避免集中过期 key。 
-  安全性:不要将 Redis 部署在公网可访问的服务器上,使用密码认证,禁用危险命令。 
-  监控:监控 Redis 的性能和资源使用情况,及时发现和解决问题 。 
注:后续会更新每种消息中间件单独实践文章
相关文章:
 
消息中间件---初识(Kafka、RocketMQ、RabbitMQ、ActiveMQ、Redis)
1. 简介 消息中间件是一种支撑性软件系统,它在网络环境中为应用系统提供同步或异步、可靠的消息传输。消息中间件利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。它支持多种通信协议和数据格式,…...
 
MySQL高阶2010-职员招聘人数2
目录 题目 准备数据 分析数据 总结 题目 一家公司想雇佣新员工。公司的工资预算是 $70000 。公司的招聘标准是: 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。用剩下的预算雇佣薪水最低的初级职员。继续以最低的工资雇佣初级职员&…...
 
【Java】—— 集合框架:Collection接口中的方法与迭代器(Iterator)
目录 1. 集合框架概述 1.1 生活中的容器 1.2 数组的特点与弊端 1.3 Java集合框架体系 1.4 集合的使用场景 2. Collection接口及方法 2.1 添加 2.2 判断 2.3 删除 2.4 其它 3. Iterator(迭代器)接口 3.1 Iterator接口 3.2 迭代器的执行原理 3.3 foreach循环 1. 集…...
 
华证ESG工具变量(2009-2022年)
华证ESG工具变量包括以下十个关键指标: 同年份同行业的ESG均值(mean1):在同一年份和相同行业中,所有企业的ESG表现平均值。 同年份同省份的ESG均值(mean2):在同一年份和相同省份中&…...
 
Linux date命令(用于显示和设置系统的日期和时间,不仅可以显示时间,还能进行复杂的时间计算和格式化)
文章目录 深入探讨 Linux Date 命令1. Date 命令详细功能解析1.1 命令概述1.2 命令语法 2. 时间显示与格式化2.1 标准时间输出2.2 自定义格式输出 3. 设置系统日期和时间3.1 基本用法3.2 注意事项 4. 实用示例与脚本应用4.1 生成时间戳秒级时间戳毫秒时间戳 4.2 时间戳转换4.3 …...
 
高中教辅汇总【35GB】
文章目录 一、资源概览二、资源亮点三、获取方式 一、资源概览 这份教辅资源汇总,精心搜集了高中各学科的海量教辅资料,总容量高达35GB,覆盖了语文、数学、英语、物理、化学、生物、历史、地理、政治等所有必修及选修科目。从基础知识点到难…...
 
树莓派 AI 摄像头(Raspberry Pi AI Camera)教程
系列文章目录 前言 人们使用 Raspberry Pi 产品构建人工智能项目的时间几乎与我们生产 Raspberry Pi 的时间一样长。随着我们发布功能越来越强大的设备,我们能够支持的原生应用范围也在不断扩大;但无论哪一代产品,总会有一些工作负载需要外部…...
SpringBoot实现的师生健康信息管理平台
第1章 绪论 1.1背景及意义 随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对医院管理方面的要求也在不断提高,由于老龄化人数更是不断增加,使得师生健康信息管理系统的开发成为必需而且紧…...
 
启用vnc访问Dell 服务器IDRAC 7虚拟控制台
Dell IDRAC 7 版本太老,SSL证书过期,IDRAC的Java和本地远程虚拟机控制台访问不了,怎么办? 可以启用vnc访问IDRAC 虚拟控制台...
 
分布式数据库知识详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
 
无人化焦炉四大车系统 武汉正向科技 工业机车无人远程控制系统
焦炉四大车无人化系统介绍 采用格雷母线光编码尺双冗余定位技术,炉门视觉定位自学习技术,wifi5G无线通讯技术,激光雷达安全识别技术,焦化智慧调度,手机APP监控功能。 焦炉四大车无人化系统功能 该系统能自动生成生产…...
 
【Linux】几种常见配置文件介绍
配置文件目录 linux 系统中有很多配置文件目录 /etc/systemd/system /lib/systemd/system /usr/lib/systemd/system 【结果就是这个目录配置文件是源头】 这三者有什么样的关系呢? 以下是网络上找的资料汇总,并加了一些操作验证。方便后期使用 介…...
 
【2024最新】华为HCIE认证考试流程
HCIE是华为认证体系中最高级别的ICT技术认证,表示通过认证的人具有ICT领域专业知识和丰富实践经验。 HCIE认证方向:最高认证级别HCIE的技术方向有13个 下面以HCIE-Datacom为例给大家介绍一下: HCIE-Datacom认证考试流程: 1.笔试…...
 
Golang | Leetcode Golang题解之第453题最小操作次数使数组元素相等
题目: 题解: func minMoves(nums []int) (ans int) {min : nums[0]for _, num : range nums[1:] {if num < min {min num}}for _, num : range nums {ans num - min}return }...
想知道为什么有DICOM格式,YAML格式,XML格式,JSON格式吗?
1 因为是为了代码和数据的可移植性 我们都知道,现在的操作系统有很大概两种,Win派,UNIX派(Mac,Linux和Arm),如果您在不同的机器之间交换二进制文件,二进制数据会被当作垃圾读取&…...
 
Kubernetes环境搭建
华子目录 Kubernetes部署说明环境准备工作主机准备harbor搭建k8s集群中的主机名和ip设定k8s集群中设置hosts解析k8s中的所有节点关闭防火墙和selinuxk8s集群中禁用swap分区k8s集群中安装docker-cek8s集群中下载harbor证书k8s集群中配置harbor镜像加速器 k8s节点登录harbor测试 …...
 
draw.io创建自定义形状
Create custom shapes in draw.io using the text editor Reference draw怎么创建和编辑复杂的自定义形状 https://blog.csdn.net/u012028275/article/details/113828875 Create custom shapes in draw.io using the text editor...
 
【CSS3】css开篇基础(1)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...
华为杯”第十二届中国研究生数学建模竞赛-D题:单/多列车优化决策问题的研究
目录 摘 要: 一、问题叙述 1.1 研究背景 1.2 要解决的问题 二、基本假设、名词约定及符号说明 2.1 模型假设 2.2 名词约定 2.3 符号说明 三、问题分析与模型准备 3.1 问题分析 3.2 数据处理 3.3 模型准备 3.3.1 列车运行动力学模型 3.3.2 列车运行耗能模型 四、问题一模型建立…...
 
【Docker】docker的存储
介绍 docker存储主要是涉及到3个方面: 第一个是容器启动时需要的镜像 镜像文件都是基于图层存储驱动来实现的,镜像图层都是只读层, 第二个是: 容器读写层, 容器启动后,docker会基于容器镜像的读层&…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
 
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
 
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
 
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
 
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
 
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
