当前位置: 首页 > news >正文

深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)

消息队列

一、概念

  • 消息队列(MQ):一种异步通信机制,通过“消息”的形式让不同系统或模块解耦
  • 核心思想:发送方(生产者Producer)只负责发送消息,接收方(消费者Consumer)只负责消费消息,两者之间通过队列(Broker)传递消息
  • 优势:
    1. 系统解耦
    2. 异步处理,提高性能
    3. 削峰填谷(流量削峰,平稳处理高并发请求)
    4. 可靠通信(保证消息送达和消费)

二、底层实现原理

1. 基础模型
  • Producer(生产者):发送消息的程序/服务
  • Broker(消息中间件):消息存储与转发的核心
  • Consumer(消费者):接收并处理消息的程序
  • Queue / Topic
    • Queue(点对点,P2P):消息只会被一个消费者接收
    • Topic(发布/订阅,Pub/Sub):一个消息可以被多个消费者接收
2. 底层关键机制
  • 存储机制:磁盘顺序写(提高吞吐量)+ 内存缓存(加速访问)
  • 传输协议:TCP / HTTP / 自定义协议(Kafka使用TCP + 自定义协议)
  • 消息投递:支持同步投递、异步投递、批量投递
  • 可靠性保障:消息确认(ACK)、重试机制、持久化存储

三、各类MQ特点

1. Kafka
  • 定位:吞吐量高的分布式消息队列 & 流处理平台

  • 底层实现:

    • 顺序写磁盘 + 零拷贝(高性能I/O)
    • 分区(Partition) + 副本(Replica)保证扩展性与高可用
    • 消费者通过offset拉取消息,自行维护消费进度
  • 特点:

    • 高吞吐量,适合大数据场景
    • 保证消息顺序(分区内有序)
    • 不支持事务(0.11之后有支持,但是比较重)
  • 应用场景:

    • 日志收集系统(ELK、日志聚合)
    • 大数据实时流处理(Flink、Spark Steaming)
    • 高并发订单 / 交易消息处理
2. RabbitMQ
  • 定位:功能最强大、协议最完善的消息中间件
    • 消息中间件:包括消息队列、路由、持久化、事务、确认机制、协议支持等功能
  • 底层实现:
    • 基于Erlang开发
    • 使用AMQP协议(Advanced Message Queuing Protocol)
    • 支持消息路由(Exchange)+ 队列(Queue)
  • 特点:
    • 强调可靠行,强一致性(消息确认机制(ACK)、持久化、事务支持)
    • 路由灵活(Direct、Topic、Fanout、Headers)
    • 吞吐量相对Kafka低
  • 应用场景:
    • 电商订单系统(下单—>扣库存—>发货)
    • 任务异步执行(邮箱发送、短信推送)
    • 金融系统需要强一致性的场景
3. RocketMQ
  • 定位:阿里巴巴开源的高可用、高可靠分布式MQ
  • 底层实现:
    • 基于java开发
    • 消息存储基于CommitLog + ConsumeQueue索引机制
    • 支持顺序消息、延迟消息、事务消息
  • 特点:
    • 支持海量堆积(百万级消息堆积不影响性能)
    • 强调事务信息(保证最终一致性)
    • 性能接近Kafka,但支持更多企业级功能
  • 应用场景:
    • 电商交易系统(保证事务一致性)
    • 金融支付消息(高可靠)
    • 延迟任务(延迟队列)
3. Redis
  • 定位:缓存数据库,但也能充当轻量级消息队列
  • 实现方式:
    • List(LPUSH / RPOP)实现简单队列
    • Pub / Sub实现发布订阅模式
    • Redis Stream(5.0+)更强大,支持分组消费、持久化
  • 特点:
    • 极快,内存级性能
    • 可靠性差(宕机可能丢消息,除非持久化)
    • 不适合大规模复杂MQ场景
  • 应用场景:
    • 实时任务队列(轻量级异步任务)
    • 简单的发布订阅(聊天室、消息推送)
    • 作为Kafka / RabbitMQ的补充

文章转载自:

http://j59JmROI.ttdbr.cn
http://dLBDdbYH.ttdbr.cn
http://KREVPl89.ttdbr.cn
http://MeE7JoJH.ttdbr.cn
http://tC6PxtT2.ttdbr.cn
http://bgA0LnQf.ttdbr.cn
http://5FmWtDSd.ttdbr.cn
http://JJaHA7oG.ttdbr.cn
http://qtyZZVbX.ttdbr.cn
http://VTNHqNn7.ttdbr.cn
http://knahkLGy.ttdbr.cn
http://LZflteZc.ttdbr.cn
http://8ZYQsqIJ.ttdbr.cn
http://T7Hg67fG.ttdbr.cn
http://kHf3R64e.ttdbr.cn
http://MNjxA5yB.ttdbr.cn
http://VxDNoveX.ttdbr.cn
http://0fhAnPko.ttdbr.cn
http://ZX8Rs4Ra.ttdbr.cn
http://Qk4t16WG.ttdbr.cn
http://XWLLNts5.ttdbr.cn
http://BQsTQgBd.ttdbr.cn
http://s3AUCQeh.ttdbr.cn
http://azJgwKl1.ttdbr.cn
http://eDtkMnCv.ttdbr.cn
http://OE4L7Hbh.ttdbr.cn
http://EYPlMCxw.ttdbr.cn
http://3GHjetJX.ttdbr.cn
http://R7MmCM2L.ttdbr.cn
http://S6a9BT9V.ttdbr.cn
http://www.dtcms.com/a/368611.html

相关文章:

  • 工业HMI:人机交互的核心与智能制造的桥梁
  • 解决rt_pin_get返回错误码的问题
  • 基于单片机汽车防撞系统设计
  • Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!
  • 【AI总结】Python BERT 向量化入门指南
  • 《sklearn机器学习——回归指标2》
  • 投资储能项目能赚多少钱?小程序帮你测算
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的公益课引流策略研究
  • 医疗问诊陪诊小程序:以人性化设计构建健康服务新生态
  • modbus_tcp和modbus_rtu对比移植AT-socket,modbus_tcp杂记
  • 云手机的空间会占用本地内存吗
  • HTML 各种事件的使用说明书
  • docker 部署RustDesk服务
  • 【Python基础】 20 Rust 与 Python 循环语句完整对比笔记
  • 为什么后端接口不能直接返回数据库实体?聊聊 Product 到 ProductDetailVo 的转换逻辑
  • Rust 基础语法
  • 【Python基础】 19 Rust 与 Python if 语句对比笔记
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 字符串(2)
  • MySQL问题4
  • PHY的自适应协商简析
  • MySQL InnoDB 的锁机制
  • 海盗王64位dx9客户端修改篇之五
  • 官宣:Apache Cloudberry (Incubating) 2.0.0 发布!
  • SpringBoot 中 ThreadLocal 的妙用:原理、实战与避坑指南
  • Unity Hub 创建支持 Android iOS 的项目教程
  • LangGraph节点完整组成与要求详解
  • 【Qt开发】按钮类控件(三)-> QCheckBox
  • mcp_clickhouse代码学习
  • Spring Boot 源码深度解析:揭秘自动化配置的魔法