文章目录

    • 为什么需要消息队列?🤔
      • 🎯 核心价值
      • 📋 使用场景
    • 🏗️ 架构层面的基本概念
      • 整体架构图
      • 📦 核心组件详解
        • 1. Broker(消息代理)
        • 2. Topic(主题)
        • 3. Partition/Queue(分区/队列)
        • 4. Producer & Consumer(生产者 & 消费者)
        • 5. ConsumerGroup(消费分组)
        • 6. Message(消息)
        • 7. Offset(位点)
        • 8. ACK(确认机制)
        • 9. Leader/Follower(主从副本)
        • 10. Segment(数据段)
        • 11. StartOffset/EndOffset(起始/结束位点)
        • 12. ACL(访问控制)
    • ⚙️ 功能层面的基本概念
      • 🎯 消息处理特性
        • 1. 顺序消息
        • 2. 延时消息/定时消息
        • 3. 事务消息
      • 🔄 消息处理机制
        • 4. 消息重试
        • 5. 消息回溯
        • 6. 广播消费
      • 🛠️ 高级功能
        • 7. 死信队列
        • 8. 优先级队列
        • 9. 消息过滤
        • 10. 消息过期(TTL)
        • 11. 消息轨迹
        • 12. 消息查询
      • 🚀 性能优化功能
        • 13. 消息压缩
        • 14. 多租户
        • 15. 消息持久化
        • 16. 消息流控
    • 🎯 实际应用场景
      • 📈 电商系统
      • 🏦 金融系统
      • 📱 社交系统
    • 💡 最佳实践建议
      • 1. 选择合适的产品
      • 2. 设计原则
      • 3. 性能优化
    • 🎉 总结

为什么需要消息队列?🤔

在系统架构中,消息队列的定位就是总线和管道,主要起到解耦上下游系统、数据缓存的作用。它不像数据库,会有很多计算、聚合、查询的逻辑,它的主要操作就是生产和消费

🎯 核心价值

  • 解耦系统:就像快递小哥让商家和买家不需要直接见面一样
  • 数据缓冲:高峰期时,就像快递柜一样暂存包裹
  • 异步处理:让系统不用等待,提高响应速度

📋 使用场景

我们会在以下情况选择使用消息队列:

  • 需要解耦上下游系统
  • 对数据有缓冲缓存需求
  • 需要用到消息队列的特殊功能(延时消息、优先级消息等)

🏗️ 架构层面的基本概念

整体架构图

Producer生产者
Broker消息代理
Consumer消费者
Topic主题
Partition分区
ConsumerGroup消费组

📦 核心组件详解

1. Broker(消息代理)

🏪 比喻:就像快递公司的分拣中心

本质:Broker 本质上是一个进程,比如 RocketMQ 的 Broker 就是指 RocketMQ Server 启动成功后的一个进程。

实际部署

  • 通常一个物理节点只起一个进程
  • 大部分情况下 Broker = 一个节点
  • 特殊场景:一个物理节点可以起多个进程(多个Broker)
2. Topic(主题)

🏷️ 比喻:就像快递公司的不同业务线(普通快递、生鲜快递、大件快递)

定义:用来组织分区关系的一个逻辑概念

特点

  • 一个 Topic 通常包含多个分区
  • 例外:RabbitMQ 中 Topic 指具体的主题模式
3. Partition/Queue(分区/队列)

📦 比喻:就像快递分拣中心的不同传送带

统一概念:分区、分片、Partition、Queue、MessageQueue 都是一个概念

作用

  • 数据存储的最小单位
  • 可以直接写入分区或通过Topic分发
  • 一个Topic通常包含一个或多个分区
4. Producer & Consumer(生产者 & 消费者)

👤 比喻:生产者就像寄快递的人,消费者就像收快递的人

Producer(生产者)

  • 消息的发送方
  • 发送消息的客户端
  • 也叫生产端

Consumer(消费者)

  • 消息的接收方
  • 接收消息的客户端
  • 也叫消费端
5. ConsumerGroup(消费分组)

👥 比喻:就像同一个办公室的同事们,大家一起分担收快递的工作

作用

  • 组织消费者和分区关系
  • 保存消费进度
  • 实现负载均衡
6. Message(消息)

📝 比喻:就是具体的快递包裹

定义:指一条真实的业务数据,消息队列的每条数据都叫做一条消息

7. Offset(位点)

📍 比喻:就像快递单号,记录你收到了第几个包裹

作用

  • 记录消费者消费分区的进度
  • 避免重复消费
  • 确保消息不丢失
8. ACK(确认机制)

比喻:就像签收快递时的确认

作用

  • 确认数据消费成功
  • 提交当前消费位点
  • 确保不重复消费
9. Leader/Follower(主从副本)

👑 比喻:就像快递公司的总部和分部

Leader(主副本)

  • 负责处理读写请求
  • 一个分区只有一个Leader

Follower(从副本)

  • 备份数据
  • 可以接替Leader工作
10. Segment(数据段)

📁 比喻:就像快递公司的不同仓库

定义:消息数据在底层存储时,分为多个文件存储时的文件

特点

  • 比如每超过1G就新起一个文件
  • 所有消息队列都有段的概念
  • Kafka叫Segment,Pulsar叫Ledger
11. StartOffset/EndOffset(起始/结束位点)

📊 比喻:就像快递柜的起始和结束编号

StartOffset(起始位点)

  • 当前最早有效消息的位点
  • 会动态变化(过期数据被清理)

EndOffset(结束位点)

  • 最新数据的写入位置
  • 持续增长
12. ACL(访问控制)

🔐 比喻:就像快递公司的权限管理

作用:对集群中的资源进行权限控制

  • 控制分区或Topic的读写权限
  • 确保数据安全

⚙️ 功能层面的基本概念

🎯 消息处理特性

1. 顺序消息

📋 比喻:就像排队取快递,先到先得

定义:生产者按顺序写入的消息,消费者能否按相同顺序消费

应用场景

  • 订单状态变更
  • 用户操作日志
  • 金融交易记录
2. 延时消息/定时消息

比喻:就像设置快递的送达时间

延时消息

  • 以Broker收到消息时间为准
  • 例:30分钟后才能被消费

定时消息

  • 指定具体时间点
  • 例:明天20:00才能被消费

技术实现:两者内核实现相同,客户端体验略有差异

3. 事务消息

💼 比喻:就像银行转账,要么成功要么失败

定义:发送一批消息,要么同时成功,要么同时失败

应用场景

  • 分布式事务
  • 数据一致性保证

🔄 消息处理机制

4. 消息重试

🔁 比喻:就像快递送不到时的重试机制

生产者重试

  • 发送失败后自动重试
  • 可配置重试次数、间隔

消费者重试

  • 消费失败后自动重试
  • 确保消息最终被处理
5. 消息回溯

比喻:就像可以重新查看历史快递记录

定义:消息消费成功后不删除,可以重复消费

应用场景

  • 数据修复
  • 历史数据分析
  • 测试环境数据回放
6. 广播消费

📢 比喻:就像群发短信,所有人都能收到

定义:一条消息能被多个消费者消费

实现方式

  • 不是主动广播
  • 而是消息能被多个消费者获取

🛠️ 高级功能

7. 死信队列

🗑️ 比喻:就像快递公司的"问题包裹"处理中心

作用

  • 处理无法正常消费的消息
  • 避免阻塞正常消息处理
  • 便于问题排查

使用场景

  • 消费端:处理失败的消息
  • 生产端:无法写入的消息
8. 优先级队列

🎯 比喻:就像VIP客户优先处理

定义:给消息设置权重,权重大的优先消费

应用场景

  • 紧急订单处理
  • 系统告警消息
  • 高优先级业务
9. 消息过滤

🔍 比喻:就像按标签筛选快递

功能

  • 给消息打标签
  • 根据标签过滤消费
  • 实现精准投递
10. 消息过期(TTL)

比喻:就像快递的保质期

作用

  • 自动清理过期消息
  • 节省存储空间
  • 保证数据时效性
11. 消息轨迹

📊 比喻:就像快递的全程跟踪

记录信息

  • 发送时间、状态
  • 服务端处理情况
  • 消费时间、结果
  • 全生命周期追踪
12. 消息查询

🔎 比喻:就像快递查询系统

查询方式

  • 根据消息ID查询
  • 根据消费位点查询
  • 类似数据库的select操作

🚀 性能优化功能

13. 消息压缩

📦 比喻:就像压缩文件节省空间

作用

  • 节省网络带宽
  • 减少存储空间
  • 提高传输效率

实现位置

  • 客户端压缩(推荐)
  • 服务端压缩
14. 多租户

🏢 比喻:就像一栋大楼里的不同公司

功能

  • 逻辑隔离
  • 资源隔离
  • 权限管理

实现方式

  • Namespace(命名空间)
  • Tenant(租户)
15. 消息持久化

💾 比喻:就像重要文件要备份

作用

  • 数据持久化存储
  • 节点重启后数据不丢失
  • 保证数据可靠性
16. 消息流控

🚦 比喻:就像交通信号灯控制车流

控制维度

  • Topic级别限流
  • 分区级别限流
  • 消费组级别限流
  • 集群级别限流

🎯 实际应用场景

📈 电商系统

用户下单 → 订单服务 → 消息队列 → 库存服务↓支付服务↓物流服务

🏦 金融系统

交易请求 → 风控系统 → 消息队列 → 清算系统↓通知系统

📱 社交系统

用户发帖 → 内容审核 → 消息队列 → 推荐系统↓通知系统

💡 最佳实践建议

1. 选择合适的产品

  • Kafka:高吞吐、大数据场景
  • RocketMQ:阿里系、事务消息
  • RabbitMQ:轻量级、功能丰富
  • Pulsar:云原生、多租户

2. 设计原则

  • 消息幂等性设计
  • 合理的分区策略
  • 监控和告警机制
  • 容灾备份方案

3. 性能优化

  • 批量发送消息
  • 合理设置分区数
  • 消费者并发度调优
  • 网络和存储优化

🎉 总结

消息队列就像现代系统架构中的"神经系统",它让各个系统组件能够高效、可靠地通信。理解这些基本概念,就像掌握了快递公司的运营规则,能够更好地设计和使用消息队列系统。

记住:消息队列的核心就是"生产"和"消费",其他所有功能都是围绕这两个核心操作展开的。


💬 互动讨论:你在实际项目中遇到过哪些消息队列的挑战?欢迎在评论区分享你的经验和解决方案!


参考资料:

  • Apache Kafka 官方文档
  • RocketMQ 官方文档
  • RabbitMQ 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85587.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85587.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85587.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell脚本中和||语法解析

https://www.cnblogs.com/liuyuelinfighting/p/16377705.html 在 Shell 脚本中,&& 和 || 是逻辑操作符,用于根据前一个命令的退出状态(成功或失败)决定是否执行后续命令。这种语法称为 命令链(Command Chainin…

MySQL中的常见运算符

精选专栏链接 🔗 MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅,点赞+关注,每日精进1%,共攀技术高峰 更多内容持续更新中!希望能给大家带来帮助~ &…

高级IO技术详解:阻塞/非阻塞IO、多路复用与内存映射

高级IO技术详解:阻塞/非阻塞IO、多路复用与内存映射 关键词:阻塞IO 非阻塞IO select/poll/epoll mmap 一、阻塞IO vs 非阻塞IO 类型行为特点设置方式阻塞IO- 读空管道阻塞- 写满管道阻塞默认模式非阻塞IO- 读空文件返回 -1,errnoEAGAIN- 写满…

【无标题】拓扑对偶框架的严格性补完与哲学突破

拓扑对偶框架的严格性补完与哲学突破: 一、数学严格性补完:同调类守恒的解决方案 1.1 负系数问题的几何化修正 **问题本质**:当 $a_i$ 含负数时,曲率分配 $\kappa\frac{2\pi a_i}{A_{\text{max}}}$ 导致伪黎曼流形 **解决方案…

从0开始学习R语言--Day25--A/B测试 vs 多臂老虎机

通常在比较两个不同的方案对数据的影响时,我们会各拿50%的数据去进行对照试验,这样观测到的结果会最大程度地保留统计学上的特点。但实际上,并不是所有对比不同方案都要这样做,一来,我们需要等到两组实验都完全结束后&…

功耗高?加密弱?爱普特APT32F1023H8S6单片机 2μA待机+AES硬件加密破局

爱普特APT32F1023H8S6单片机深度解析 1. 产品定位 APT32F1023H8S6 是爱普特半导体(APT)推出的 32位高性能单片机,基于 ARM Cortex-M0内核,主打 高集成度、低功耗、高性价比,面向消费电子、工业控制和物联网领域。 2. …

【MFC】绘制自定义控件-显示图片(支持放大操作)

目录 一、CDC类(二级缓存)二、计算视口三、放大操作代码中初始化操作(方便以后cv) 一、CDC类(二级缓存) CDC类是设备上下文的核心类,它的作用是抽象化对图形输出设备(像屏幕、打印机…

在Proteus新工程中放置基本元器件

视频教程: [最详细]Proteus新建第一个工程与快捷键设置 操作步骤 1选择这个黄色的三角,然后点击旁边的P,开始找元件。 2点开P后,呈现如下图界面,我们在Keyword栏中,输入stm32,然后他会自动出现对应的元件&…

PRUD币推动健康数据资产化,开启Web3隐私金融新时代

在全球健康科技与数据主权浪潮下,PRUD币(Prudential Utility & Data Token)正成为Web3健康金融领域中的重要通证。项目通过链上身份绑定、健康行为证明、隐私计算与NFT机制,为用户打造了“健康数据资产化”的创新路径&#xf…

Mac 安装 finalshell

1.下载 地址:FinalShell官网 第一个进入选择对应的 mac 版本下载。 下一步下一步完成安装。 2.链接虚拟机,点击图示文件夹 点击新建链接,新建 SSH 链接 3.去 vmware 中查询 Linux 系统的 IP,使用 ip addr 命令或者 ifconfig 命令皆可。 ip…

Javaweb - 2 HTML

目录 HTML 入门 1. HTML & CSS & JavaScript 的作用 2. 什么是 HTML 3. 什么是超文本 4. 什么是标记语言 5. HTML 基本结构 6. HTML 概念词汇解释 7. HTML 的一些语法规则 8. 开发工具 VsCode 安装插件: 常见设置: HTML 常见标签 …

CWGAN-GP 增强型 CAE 在非 IID 数据集中用于 5G-NR 干扰检测

抽象 在不断扩大的 5G-NR 无线蜂窝网络领域中,无线干扰攻击作为安全攻击普遍存在,损害了接收信号的质量。我们通过将加性高斯白噪声 (AWGN) 合并到真实世界的同相和正交 (I/Q) OFDM 数据集中来模拟干扰环境…

JavaEE-Spring-Web-Mvc

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Serv…

Linux从入门到入门

系统教程学习类 Ubuntu 从入门到精通 系统页面/基本操作类 Ubuntu20.04终端固定终端到左边的导航栏_ubuntu20.04设置菜单固定-CSDN博客Ubuntu 20.04 系统5分钟后老是自动锁屏_修改锁屏时间-CSDN博客 命令类 拷贝:将 下载 文件夹里的.sh文件 复制到opt目录下 sudo cp…

AI自动生成Git提交信息-git AI Commit

在现代软件开发中,编写清晰且一致的Git提交信息对于维护项目历史和促进团队协作至关重要。然而,为每次变更手动撰写描述性提交信息可能耗时,尤其是处理复杂差异或大型项目时。AI Commit 是一个利用AI分析Git差异并生成符合Conventional Commi…

【三大前端语言之一】样式:CSS详解

【三大前端语言之一】样式:CSS详解 在了解完HTML的有关知识后,我们应该知道,一个网页光有框架还不行,必须还得有装饰它的样式。就好比房子的结构搭好了,但如果没有油漆、没有窗帘、没有家具,就无法真正展现…

Spring AI 聊天记忆功能实战(一):从接口设计到生产实践

Spring AI 聊天记忆功能实战(一):从接口设计到生产实践 在构建AI对话应用时,聊天记忆管理及存储是实现连贯上下文交互的关键组件。而大模型(LLM)本质上是无状态的,这意味着它们不会保留历史交互…

Element Plus 对话框 el-dialog 和 抽屉 el-drawer 的使用注意项(使用 div 包裹)

总结:使用 div 包裹!!! 详细说明: 对话框 el-dialog 或 抽屉 el-drawer 样式的设置说明: 要想有效设置 el-dialog 或 el-drawer 的样式,需确保 el-dialog 或 el-drawer 的上层不是template&am…

【python】简单演示 gateway、service、client的工作原理

gateway 看起来主要是做协议转换的A gateway is a network node that acts as an entrance and exit point, connecting two networks that use different protocols. It allows data to flow between these networks, essentially acting as a translator between different c…

数据仓库面试题合集⑥

实时指标体系设计 + Flink 优化实战:面试高频问题 + 项目答题模板 面试中不仅会问“你做过实时处理吗?”,更会追问:“实时指标体系是怎么搭建的?”、“你们的 Flink 稳定性怎么保证?” 本篇聚焦实时指标体系设计与 Flink 优化场景,帮你答出架构设计力,也答出调优实战感…