RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析
1️⃣ 引言
在现代分布式系统架构中,📩消息队列(MQ)是不可或缺的组件。它在系统🔗解耦、📉流量削峰、⏳异步处理等方面发挥着重要作用。目前,主流的消息队列系统包括 🚀RocketMQ、🐰RabbitMQ 和 📢Kafka。
本论文将概要分析三者的🔍底层实现原理、⚖️功能异同、📜使用示例、📌典型应用场景以及🛠️技术选型考量,以帮助架构师和 Java 开发工程师选择合适的消息队列方案。
2️⃣ 消息队列基础概念
📌2.1 消息模型
- 🔄点对点(P2P)模式:一个📩消息只能被一个👥消费者消费(🐰RabbitMQ 经典队列模型)。
- 📢发布/订阅(Pub/Sub)模式:消息可被多个👥订阅者消费(📢Kafka、🚀RocketMQ 支持的模式)。
🛡️2.2 可靠性机制
- 💾持久化:消息是否存储到📀磁盘,防止数据丢失。
- ✅确认机制:消息是否成功消费(ACK 机制)。
- 🔄重复消费与幂等性:如何防止消息重复消费。
- ⚖️事务支持:部分 MQ(如 🚀RocketMQ)支持事务消息。
⚖️2.3 CAP 原则与 MQ 选型
根据 CAP 定理,MQ 在🛠️一致性(C)、⚡可用性(A)和🌍分区容错性(P)之间进行权衡。
| MQ | CAP 选择 |
|---|---|
| 🚀RocketMQ | AP |
| 🐰RabbitMQ | CP |
| 📢Kafka | AP(默认)或 CP(开启 acks=all) |
3️⃣ RocketMQ、RabbitMQ、Kafka 的底层实现
🚀RocketMQ 的底层架构
- 💾存储:基于
CommitLog,消息采用 📄顺序写,借助 🛠️PageCache 提高吞吐量。 - 🔍索引:基于 🔗Hash 索引加快消息查找。
- 🔄消费方式:支持 ⬇️Pull & ⬆️Push 方式消费。
- ⚖️事务消息:支持 ⏳半消息(Half Message),确保最终一致性。
- 📌Broker 角色:分为
Master和Slave,可选Dledger模式提升高可用性。
🐰RabbitMQ 的底层架构
- 🐰基于 Erlang 语言开发,原生支持⚡高并发。
- 💾存储:消息存储在
Queue,持久化采用mnesia。 - 🔀交换机(Exchange):路由消息到
Queue,支持Direct、Topic、Fanout、Header等模式。 - ✅确认机制:支持
ACK、NACK、💀死信队列(DLX)。 - 🚦流控:基于
prefetch参数控制消费速率。
📢Kafka 的底层架构
- 💾存储:消息存储在
Segment文件中,采用📄顺序写,借助 🛠️Zero-copy 机制提升 IO 效率。 - 🔢Topic & Partition:数据分区提高并发度,Partition 副本机制提高可靠性。
- 🔄消费模型:基于
Consumer Group,每个分区只由一个👥消费者消费。 - ✅一致性:支持
acks=1(默认)、acks=all(强一致性)。
4️⃣ 三者的功能对比
| 🎯特性 | 🚀RocketMQ | 🐰RabbitMQ | 📢Kafka |
|---|---|---|---|
| 🖥️开发语言 | Java | Erlang | Scala/Java |
| 💾存储方式 | CommitLog | Queue | Segment + Partition |
| ⚡吞吐量 | 中等 | 低 | 高 |
| ⏳延迟 | 低 | 低 | 高(默认批量消费) |
| ⚖️事务消息 | ✅支持 | ❌不支持 | ❌不支持 |
| 🔄消息模型 | Pub/Sub、P2P | P2P(带交换机) | Pub/Sub(基于 Partition) |
| 🛡️可靠性 | 高(同步刷盘) | 高(ACK 机制) | 高(多副本) |
| 📌适用场景 | 分布式事务、大规模消息推送 | 低延迟、微服务异步通信 | 日志收集、流式计算 |
5️⃣ 典型应用场景
🚀RocketMQ 应用场景
- 💰金融支付系统:保障⚖️事务消息一致性。
- 🛒电商订单系统:订单状态变更通知。
- ⏳延迟消息:订单超时处理、📲短信验证码等。
🐰RabbitMQ 应用场景
- 🌍微服务架构:服务间异步调用。
- 📡实时通知:如 WebSocket 推送、📧邮件服务。
- 📤任务队列:后台异步任务执行。
📢Kafka 应用场景
- 📊日志收集与分析:ELK、ClickHouse 方案。
- ⚡实时流处理:Flink、Spark Streaming。
- 🔄事件驱动架构:大规模数据分发。
6️⃣ 技术选型指南
✅选择 🚀RocketMQ:
- 需要 ⚖️事务消息
- 需要 🛡️高可靠性 和 ⏳低延迟
✅选择 🐰RabbitMQ:
- 需要 🔀复杂路由(交换机)
- 需要 ⚡低吞吐、⏳短生命周期 的📩消息队列
✅选择 📢Kafka:
- 需要 📊海量数据处理(日志、流计算)
- 需要 ⚡高吞吐量
7️⃣ 结论
🚀RocketMQ、🐰RabbitMQ、📢Kafka 各有千秋,架构师在选型时需结合具体业务需求,综合考虑 吞吐量、💾消息持久化、⚖️事务性、📈扩展性 等因素,选择最合适的📩消息队列方案。
相关深入分析
相关文章:
RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析
1️⃣ 引言 在现代分布式系统架构中,📩消息队列(MQ)是不可或缺的组件。它在系统🔗解耦、📉流量削峰、⏳异步处理等方面发挥着重要作用。目前,主流的消息队列系统包括 🚀RocketMQ、&…...
UWB功耗大数据插桩调研
一、摘要 UWB功耗点 插桩点 日志关键字 电流 蓝牙持锁 BatteryStats的锁统计 vendor_bluetooth_lock 30~40mA 测距 UwbSessionManager.startRanging UwbSessionManager.stoptRanging 或接入fadiKey Uwb状态广播 "com.fadiui.dkservice.action.uwb.state.change&q…...
郭羽冲IOI2024参赛总结
非常荣幸能代表中国参加第 36 36 36 届国际信息学奥林匹克竞赛( I O I 2024 IOI2024 IOI2024)。感谢 C C F CCF CCF 为我们提供竞赛的平台,感谢随行的老师们一路上为我们提供的帮助与支持。 在每场比赛的前一个晚上,领队、副领…...
03:Spring之Web
一:Spring整合web环境 1:web的三大组件 Servlet:核心组件,负责处理请求和生成响应。 Filter:用于请求和响应的预处理和后处理,增强功能。 Listener:用于监听 Web 应用中的事件,实…...
lx-music落雪音乐-开源免费听歌软件[提供最新音源使用, 支持全网平台, 支持无损音乐下载]
lx-music_落雪音乐 链接:https://pan.xunlei.com/s/VOIpEt1xqf0un-vEQilidhjIA1?pwdgcux#...
129,【2】buuctf [BJDCTF2020]EzPHP
进入靶场 查看源代码 看到红框就知道对了 她下面那句话是编码后的,解码 1nD3x.php <?php // 高亮显示当前 PHP 文件的源代码,通常用于调试和展示代码结构 highlight_file(__FILE__); // 设置错误报告级别为 0,即不显示任何 PHP 错误信息…...
Python 面向对象(类,对象,方法,属性,魔术方法)
前言:在讲面向对象之前,我们先将面向过程和面向对象进行一个简单的分析比较,这样我们可以更好的理解与区分,然后我们在详细的讲解面向对象的优势。 面向过程(Procedure-Oriented Programming,POP࿰…...
C语言之扫雷
C语言之扫雷 game.hgame.ctest.c 参考 https://blog.csdn.net/m0_62391199/article/details/124694375 game.h #pragma once #include <stdio.h> #include <time.h> #include <stdlib.h>#define ROW 9 #define COL 9#define ROWS ROW2 #define COLS COL2#de…...
半导体制造工艺讲解
目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…...
Ollama+DeepSeek R1+AnythingLLM训练自己的AI智能助手
1.下载Ollama安装 1.1.安装Ollama Ollama官网:Ollama 下载Ollama,点击“Download”按钮。 根据电脑操作系统,下载合适的版本即可。 下载完成后点击安装,完成后安装窗口会自动关闭,你的系统托盘图标会出现一个Ollama图标。 1.2.…...
基于java手机销售网站设计和实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
5-R循环
R 循环 有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多…...
Qlabel 每五个一换行 并、号分割
学习点 Qlabel 每五个一换行 并、号分割 QString MainWindow::formatHobbies(const std::set<QString>& hobbies) {QString formattedHobbies;int count 0;for (const QString& hobby : hobbies) {if (count > 0 && count % 5 0)formattedHobbies…...
加速PyTorch模型训练:自动混合精度(AMP)
在深度学习领域,模型训练的速度和效率尤为重要。为了提升训练速度并减少显存占用(较复杂的模型中),PyTorch自1.6版本起引入了自动混合精度(Automatic Mixed Precision, AMP)功能。 AMP简单介绍 是一种训练…...
【py】python安装教程(Windows系统,python3.13.2版本为例)
1.下载地址 官网:https://www.python.org/ 官网下载地址:https://www.python.org/downloads/ 2.64版本或者32位选择 【Stable Releases】:稳定发布版本,指的是已经测试过的版本,相对稳定。 【Pre-releases】&#…...
Django REST Framework:如何获取序列化后的ID
Django REST Framework:如何获取序列化后的ID 😄 嗨,小伙伴们!今天我们来聊一聊Django REST Framework(简称DRF)中一个非常常见的操作:如何获取序列化后的ID。对于那些刚入门的朋友们ÿ…...
QT修仙笔记 事件大圆满 闹钟大成
学习笔记 牛客刷题 闹钟 时钟显示 通过 QTimer 每秒更新一次 QLCDNumber 显示的当前时间,格式为 hh:mm:ss,实现实时时钟显示。 闹钟设置 使用 QDateTimeEdit 让用户设置闹钟时间,可通过日历选择日期,设置范围为当前时间到未来 …...
Leetcode - 149双周赛
目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件: 相邻数字互不相同两个数字的的…...
解决 ComfyUI-Impact-Pack 中缺少 UltralyticsDetectorProvider 节点的问题
解决 ComfyUI-Impact-Pack 中缺少 UltralyticsDetectorProvider 节点的问题 1. 安装ComfyUI-Impact-Pack 首先确保ComfyUI-Impact-Pack 已经下载 地址: https://github.com/ltdrdata/ComfyUI-Impact-Pack 2. 安装ComfyUI-Impact-Subpack 由于新版本的Impact Pack 不再提供这…...
使用Kickstart配置文件封装操作系统实现Linux的自动化安装
使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意,配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
