vault backup: 2026-05-24 20:51:06
This commit is contained in:
@@ -0,0 +1,294 @@
|
||||
---
|
||||
tags: [MQ, 消息队列, 索引]
|
||||
create time: 2026-05-24 19:52
|
||||
---
|
||||
|
||||
# 消息队列(Message Queue)
|
||||
|
||||
## 概述
|
||||
|
||||
消息队列是分布式系统中最核心的中间件之一,用于解耦、削峰、异步通信。本目录从基础概念出发,逐层深入到协议标准、存储引擎、设计模式、流处理集成、消息追踪、K8s 部署、测试策略、安全运维与架构实战,构建完整的 MQ 知识体系。
|
||||
|
||||
## 知识地图
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["消息队列"] --> B["基础概念"]
|
||||
A --> C["消息模型"]
|
||||
A --> D["协议与标准"]
|
||||
A --> E["存储引擎"]
|
||||
A --> F["可靠性保障"]
|
||||
A --> G["高级特性"]
|
||||
A --> H["主流 MQ 对比"]
|
||||
A --> I["消息设计模式"]
|
||||
A --> J["流处理与事件驱动"]
|
||||
A --> K["监控与运维"]
|
||||
A --> L["安全与多租户"]
|
||||
A --> M["架构与实战"]
|
||||
|
||||
B --> B1["什么是 MQ"]
|
||||
B --> B2["核心术语"]
|
||||
B --> B3["适用场景与选型原则"]
|
||||
|
||||
C --> C1["队列模型 vs 发布订阅模型"]
|
||||
C --> C2["Consumer Group 与 Rebalance"]
|
||||
C --> C3["Push vs Pull"]
|
||||
|
||||
D --> D1["AMQP 协议"]
|
||||
D --> D2["MQTT 协议"]
|
||||
D --> D3["JMS 与 OpenMessaging"]
|
||||
|
||||
E --> E1["Kafka 存储设计"]
|
||||
E --> E2["RocketMQ CommitLog"]
|
||||
E --> E3["RabbitMQ 消息存储"]
|
||||
|
||||
F --> F1["消息确认与持久化"]
|
||||
F --> F2["Exactly-Once 语义"]
|
||||
F --> F3["消息幂等性"]
|
||||
F --> F4["顺序性保障"]
|
||||
F --> F5["死信队列与消息回溯"]
|
||||
|
||||
G --> G1["延迟消息与定时消息"]
|
||||
G --> G2["事务消息"]
|
||||
G --> G3["消息过滤与路由"]
|
||||
G --> G4["Schema 管理与演进"]
|
||||
G --> G5["消息压缩与批处理"]
|
||||
|
||||
H --> H1["Kafka"]
|
||||
H --> H2["RabbitMQ"]
|
||||
H --> H3["RocketMQ"]
|
||||
H --> H4["Pulsar"]
|
||||
H --> H5["NATS / NSQ / Redis Streams"]
|
||||
H --> H6["选型对比"]
|
||||
|
||||
I --> I1["Competing Consumers"]
|
||||
I --> I2["CQRS 与 Event Sourcing"]
|
||||
I --> I3["Claim Check 与消息瘦身"]
|
||||
I --> I4["背压与流控"]
|
||||
I --> I5["请求-回复模式"]
|
||||
|
||||
J --> J1["Kafka Streams"]
|
||||
J --> J2["流处理框架集成"]
|
||||
J --> J3["事件驱动架构"]
|
||||
J --> J4["MQ 与 CDC"]
|
||||
|
||||
K --> K1["监控指标与告警"]
|
||||
K --> K2["消费积压治理"]
|
||||
K --> K3["消息轨迹与链路追踪"]
|
||||
K --> K4["容器化与 K8s 部署"]
|
||||
K --> K5["性能调优"]
|
||||
K --> K6["测试策略"]
|
||||
|
||||
L --> L1["认证与授权"]
|
||||
L --> L2["加密与审计"]
|
||||
|
||||
M --> M1["高可用架构"]
|
||||
M --> M2["跨集群复制与容灾"]
|
||||
M --> M3["分布式事务实践"]
|
||||
M --> M4["MQ 与微服务"]
|
||||
M --> M5["客户端 SDK 最佳实践"]
|
||||
M --> M6["客户端连接管理"]
|
||||
M --> M7["MQ 设计与实现"]
|
||||
|
||||
style A fill:#4A90D9,color:#fff
|
||||
style B fill:#6EC1E0,color:#fff
|
||||
style C fill:#6EC1E0,color:#fff
|
||||
style D fill:#6EC1E0,color:#fff
|
||||
style E fill:#F5A623,color:#fff
|
||||
style F fill:#F5A623,color:#fff
|
||||
style G fill:#F5A623,color:#fff
|
||||
style H fill:#D0021B,color:#fff
|
||||
style I fill:#D0021B,color:#fff
|
||||
style J fill:#D0021B,color:#fff
|
||||
style K fill:#D0021B,color:#fff
|
||||
style L fill:#D0021B,color:#fff
|
||||
style M fill:#D0021B,color:#fff
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
### 一、基础概念
|
||||
|
||||
由浅入深,先搞清楚 MQ 是什么、为什么需要它。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 1 | [[01-基础概念/1-MQ-基础概念|MQ 基础概念]] | 什么是消息队列、核心术语(Producer / Broker / Consumer / Topic / Queue)、为什么需要 MQ |
|
||||
| 2 | [[01-基础概念/2-MQ-适用场景与选型原则|MQ 适用场景与选型原则]] | 解耦、异步、削峰三大经典场景;何时该用 MQ,何时不该用 |
|
||||
|
||||
### 二、消息模型
|
||||
|
||||
理解消息如何从生产者流向消费者。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 3 | [[02-消息模型/3-MQ-消息模型|MQ 消息模型]] | 队列模型 vs 发布订阅模型、Consumer Group 机制、推模式 vs 拉模式 |
|
||||
|
||||
### 三、协议与标准
|
||||
|
||||
了解底层通信协议,才能理解不同 MQ 的设计取舍。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 4 | [[03-协议与标准/4-MQ-消息协议总览|MQ 消息协议总览]] | AMQP / MQTT / STOMP / JMS / OpenMessaging 横向对比与适用场景 |
|
||||
| 5 | [[03-协议与标准/5-AMQP-协议|AMQP 协议]] | AMQP 0-9-1 核心概念(Exchange / Binding / Virtual Host)、AMQP 1.0 与 0-9-1 的差异 |
|
||||
| 6 | [[03-协议与标准/6-MQTT-协议|MQTT 协议]] | IoT 场景下的轻量级协议、QoS 等级(0/1/2)、遗嘱消息、会话保持 |
|
||||
| 7 | [[03-协议与标准/7-JMS-与-OpenMessaging|JMS 与 OpenMessaging]] | Java 消息服务规范、点对点与发布订阅接口、OpenMessaging 标准化尝试 |
|
||||
|
||||
### 四、存储引擎
|
||||
|
||||
消息如何落地存储,决定了 MQ 的吞吐与可靠性上限。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 8 | [[04-存储引擎/8-MQ-存储引擎设计|MQ 存储引擎设计]] | 顺序写盘、零拷贝、Page Cache、内存映射等通用高性能存储原理 |
|
||||
| 9 | [[04-存储引擎/9-Kafka-存储设计|Kafka 存储设计]] | Partition Log 分段存储、稀疏索引、日志压缩(Log Compaction)、时间轮(Timing Wheel) |
|
||||
| 10 | [[04-存储引擎/10-RocketMQ-CommitLog|RocketMQ CommitLog]] | CommitLog + ConsumeQueue + IndexFile 三层存储模型、MappedFile 内存映射 |
|
||||
| 11 | [[04-存储引擎/11-RabbitMQ-消息存储|RabbitMQ 消息存储]] | Erlang Mnesia 表、持久化队列(durable / lazy queue)、内存告警与流控 |
|
||||
|
||||
### 五、可靠性保障
|
||||
|
||||
消息不能丢、不能重复、最好还能保序——生产环境的核心诉求。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 12 | [[05-可靠性保障/12-MQ-消息确认与持久化|MQ 消息确认与持久化]] | ACK 机制、同步/异步刷盘、主从同步、消息投递语义(At-Most-Once / At-Least-Once / Exactly-Once) |
|
||||
| 13 | [[05-可靠性保障/13-MQ-Exactly-Once-语义|MQ Exactly-Once 语义]] | 幂等生产者、事务性生产者、Consumer 端幂等消费、Exactly-Once 的边界与代价 |
|
||||
| 14 | [[05-可靠性保障/14-MQ-消息幂等性|MQ 消息幂等性]] | 为什么会产生重复消息、幂等实现方案(唯一 ID + 去重表、乐观锁、Token 机制) |
|
||||
| 15 | [[05-可靠性保障/15-MQ-顺序性保障|MQ 顺序性保障]] | 全局有序 vs 分区有序、Partition/Queue 级别的有序实现、多消费者场景下的顺序挑战 |
|
||||
| 16 | [[05-可靠性保障/16-MQ-死信队列与消息回溯|MQ 死信队列与消息回溯]] | 死信队列的产生原因与处理策略、消息重试机制、消息回溯(按时间/偏移量重放) |
|
||||
|
||||
### 六、高级特性
|
||||
|
||||
MQ 在复杂业务场景下提供的进阶能力。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 17 | [[06-高级特性/17-MQ-延迟消息与定时消息|MQ 延迟消息与定时消息]] | 延迟级别、定时投递的实现原理(时间轮、定时任务)、典型应用(订单超时取消) |
|
||||
| 18 | [[06-高级特性/18-MQ-事务消息|MQ 事务消息]] | 半消息机制、事务状态回查、分布式事务的最终一致性方案 |
|
||||
| 19 | [[06-高级特性/19-MQ-消息过滤与路由|MQ 消息过滤与路由]] | Tag / SQL 表达式过滤、Topic 路由策略、消息 Schema 演进 |
|
||||
| 20 | [[06-高级特性/20-MQ-Schema-管理与演进|MQ Schema 管理与演进]] | Schema Registry、Avro/Protobuf/Thrift 编码、前向/后向/完全兼容性策略 |
|
||||
| 21 | [[06-高级特性/21-MQ-消息压缩与批处理|MQ 消息压缩与批处理]] | Snappy / LZ4 / Zstd 压缩算法对比、批量发送与拉取策略、压缩对吞吐的影响 |
|
||||
|
||||
### 七、主流 MQ 对比
|
||||
|
||||
了解主流产品的设计差异,才能做出合理的技术选型。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 22 | [[07-主流MQ对比/22-Kafka|Kafka]] | 架构设计(Partition / Replica / ISR)、高吞吐原理(零拷贝、顺序写、批量拉取)、Kafka 生态 |
|
||||
| 23 | [[07-主流MQ对比/23-RabbitMQ|RabbitMQ]] | AMQP 协议、Exchange 类型(Direct / Fanout / Topic / Headers)、插件生态 |
|
||||
| 24 | [[07-主流MQ对比/24-RocketMQ|RocketMQ]] | NameServer / Broker / Producer / Consumer 架构、事务消息原生支持、延迟消息实现 |
|
||||
| 25 | [[07-主流MQ对比/25-Apache-Pulsar|Apache Pulsar]] | 计算存储分离架构、Segment 存储(BookKeeper)、多租户原生支持、与 Kafka 的架构对比 |
|
||||
| 26 | [[07-主流MQ对比/26-NATS-NSQ-Redis-Streams|NATS / NSQ / Redis Streams]] | NATS JetStream、NSQ 无中心架构、Redis Streams 底层 Radix Tree、轻量级场景选型 |
|
||||
| 27 | [[07-主流MQ对比/27-MQ-选型对比|MQ 选型对比]] | Kafka vs RabbitMQ vs RocketMQ vs Pulsar vs NATS 多维度对比(吞吐、延迟、可靠性、生态、运维) |
|
||||
|
||||
### 八、消息设计模式
|
||||
|
||||
用好 MQ 不只是选产品,更需要掌握经过验证的架构模式。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 28 | [[08-消息设计模式/28-MQ-Competing-Consumers-模式|MQ Competing Consumers 模式]] | 多消费者竞争消费、负载均衡策略、分区分配算法(Range / Round-Robin / Sticky / Cooperative) |
|
||||
| 29 | [[08-消息设计模式/29-MQ-CQRS-与-Event-Sourcing|MQ CQRS 与 Event Sourcing]] | 命令查询分离、事件作为数据源、事件存储与重放、与传统 CRUD 的对比 |
|
||||
| 30 | [[08-消息设计模式/30-MQ-Claim-Check-与消息瘦身|MQ Claim Check 与消息瘦身]] | 大消息拆分存储、消息体外置到对象存储、按需拉取减少网络开销 |
|
||||
| 31 | [[08-消息设计模式/31-MQ-背压与流控|MQ 背压与流控]] | 生产速率超过消费能力时的保护机制、Broker 端流控、Consumer 端反压、限流降级策略 |
|
||||
| 32 | [[08-消息设计模式/32-MQ-请求-回复模式|MQ 请求-回复模式]] | RPC over MQ、关联 ID(CorrelationID)、Reply-To 队列、与 gRPC/HTTP 调用的对比取舍 |
|
||||
|
||||
### 九、流处理与事件驱动
|
||||
|
||||
MQ 不只是"传消息",更是实时数据流的基础设施。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 33 | [[09-流处理与事件驱动/33-MQ-与流处理|MQ 与流处理]] | 消息队列 vs 流处理平台的区别与融合、Kafka Streams / Flink / Spark Streaming 集成 |
|
||||
| 34 | [[09-流处理与事件驱动/34-事件驱动架构-EDA|事件驱动架构 EDA]] | 事件风暴(Event Storming)、事件编排 vs 事件编排(Orchestration vs Choreography)、Saga 模式 |
|
||||
| 35 | [[09-流处理与事件驱动/35-MQ-与-CDC|MQ 与 CDC]] | Change Data Capture 原理、Debezium + Kafka Connect、数据库变更实时同步方案 |
|
||||
|
||||
### 十、监控与运维
|
||||
|
||||
线上 MQ 出问题,如何快速发现、定位与修复。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 36 | [[10-监控与运维/36-MQ-监控指标与告警|MQ 监控指标与告警]] | Broker / Producer / Consumer 核心指标、Prometheus + Grafana 看板搭建、告警阈值设计 |
|
||||
| 37 | [[10-监控与运维/37-MQ-消费积压治理|MQ 消费积压治理]] | 积压根因分析、紧急扩容消费者、临时队列转发、监控告警策略 |
|
||||
| 38 | [[10-监控与运维/38-MQ-消息轨迹与链路追踪|MQ 消息轨迹与链路追踪]] | 消息唯一标识(TraceID)传递规范、端到端链路可视化、消息审计日志、排查"消息去哪了" |
|
||||
| 39 | [[10-监控与运维/39-MQ-容器化与-K8s-部署|MQ 容器化与 K8s 部署]] | K8s Operator(Strimzi / RocketMQ Operator)、Helm Chart 部署、StatefulSet 有状态服务管理、资源规划与持久卷 |
|
||||
| 40 | [[10-监控与运维/40-MQ-性能调优|MQ 性能调优]] | Producer 批量与压缩、Consumer 并发与预取、Broker 刷盘与页缓存策略、网络参数优化 |
|
||||
| 41 | [[10-监控与运维/41-MQ-测试策略|MQ 测试策略]] | 集成测试(Testcontainers)、影子流量(Shadow Topic)、故障注入(Chaos Engineering)、消息契约测试(Pact) |
|
||||
|
||||
### 十一、安全与多租户
|
||||
|
||||
生产环境不可或缺的安全基础设施。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 42 | [[11-安全与多租户/42-MQ-认证与授权|MQ 认证与授权]] | SASL / mTLS / OAuth2 认证机制、ACL 细粒度授权、Kerberos 集成 |
|
||||
| 43 | [[11-安全与多租户/43-MQ-加密与审计|MQ 加密与审计]] | 传输加密(TLS)、消息级加密、审计日志、配额管理与多租户隔离 |
|
||||
|
||||
### 十二、架构与实战
|
||||
|
||||
面向真实生产环境的问题与解决方案。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 44 | [[12-架构与实战/44-MQ-高可用架构|MQ 高可用架构]] | Broker 集群与副本机制、无单点设计、灰度发布 |
|
||||
| 45 | [[12-架构与实战/45-MQ-跨集群复制与容灾|MQ 跨集群复制与容灾]] | MirrorMaker 2.0、Confluent Replicator、Dledger 多副本、跨地域同步、异地多活架构 |
|
||||
| 46 | [[12-架构与实战/46-MQ-分布式事务实践|MQ 分布式事务实践]] | 本地消息表 + MQ、事务消息 + 状态回查、Saga 模式与 MQ 结合 |
|
||||
| 47 | [[12-架构与实战/47-MQ-与微服务|MQ 与微服务]] | 服务间通信模式(同步 vs 异步)、事件驱动微服务、服务网格(Istio/Linkerd)与 MQ 集成、背压传播 |
|
||||
| 48 | [[12-架构与实战/48-MQ-客户端-SDK-最佳实践|MQ 客户端 SDK 最佳实践]] | 多语言 SDK 设计范式、连接池管理、优雅关闭(Graceful Shutdown)、序列化策略、错误处理规范 |
|
||||
| 49 | [[12-架构与实战/49-MQ-客户端连接管理|MQ 客户端连接管理]] | 长连接与心跳、重连与重试策略、分区分配策略(Consumer Rebalance)、客户端容错 |
|
||||
| 50 | [[12-架构与实战/50-MQ-设计与实现|MQ 设计与实现]] | 从零设计一个简易 MQ:存储引擎、网络模型、消费者管理、高可用方案 |
|
||||
|
||||
### 附录:云消息服务
|
||||
|
||||
了解云厂商托管方案,拓宽技术视野。
|
||||
|
||||
| 序号 | 主题 | 说明 |
|
||||
|:---:|------|------|
|
||||
| 51 | [[13-云消息服务/51-云消息服务|云消息服务]] | AWS SQS / SNS / MSK、Azure Service Bus、Google Pub/Sub、阿里云 RocketMQ 与 Kafka、自建 vs 托管对比 |
|
||||
|
||||
---
|
||||
|
||||
## 学习路径建议
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
S1["1 基础概念"] --> S2["2 消息模型"]
|
||||
S2 --> S3["3 协议与标准"]
|
||||
S3 --> S4["4 存储引擎"]
|
||||
S4 --> S5["5 可靠性保障"]
|
||||
S5 --> S6["6 高级特性"]
|
||||
S6 --> S7["7 主流 MQ"]
|
||||
S7 --> S8["8 设计模式"]
|
||||
S8 --> S9["9 流处理与 EDA"]
|
||||
S9 --> S10["10 监控运维"]
|
||||
S10 --> S11["11 安全"]
|
||||
S11 --> S12["12 架构实战"]
|
||||
|
||||
style S1 fill:#6EC1E0,color:#fff
|
||||
style S2 fill:#6EC1E0,color:#fff
|
||||
style S3 fill:#6EC1E0,color:#fff
|
||||
style S4 fill:#F5A623,color:#fff
|
||||
style S5 fill:#F5A623,color:#fff
|
||||
style S6 fill:#F5A623,color:#fff
|
||||
style S7 fill:#D0021B,color:#fff
|
||||
style S8 fill:#D0021B,color:#fff
|
||||
style S9 fill:#D0021B,color:#fff
|
||||
style S10 fill:#D0021B,color:#fff
|
||||
style S11 fill:#D0021B,color:#fff
|
||||
style S12 fill:#D0021B,color:#fff
|
||||
```
|
||||
|
||||
> [!tip] 建议
|
||||
> - **初学者**:按 1 → 2 → 3 → 5 顺序阅读,打牢基础后再进入存储引擎和高级特性。
|
||||
> - **有经验者**:可直接跳到 7(主流 MQ)和 8(设计模式),以问题驱动学习。
|
||||
> - **架构师**:重点关注 8 设计模式、9 流处理、10 监控运维、12 架构实战四个模块。
|
||||
> - 每篇笔记都包含思考题,建议先独立思考再看解答。
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[分布式系统]]
|
||||
Reference in New Issue
Block a user