Skip to content

Commit e628142

Browse files
committed
docs: 新增消息队列面试指南
1 parent d2d20a8 commit e628142

2 files changed

Lines changed: 176 additions & 6 deletions

File tree

docs/high-performance/message-queue/README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ head:
1717

1818
消息队列是高性能和高可用系统里都非常常见的中间件,主要用于异步处理、应用解耦、削峰填谷和流量缓冲。学习消息队列时,不能只背 Kafka、RocketMQ、RabbitMQ 的特性,更要理解消息可靠性、顺序性、幂等性、积压处理和技术选型。
1919

20-
如果你准备面试,可以把 MQ 问题拆成一条链路:生产者怎么保证发出去,Broker 怎么保证存得住,消费者怎么保证处理成功,失败后怎么重试和补偿。这样比单独背“消息不丢失、重复消费、顺序消费”更容易讲清楚
20+
如果你准备面试,建议先看 [消息队列面试题总结](./message-queue-interview-questions.md),把 MQ 问题放进生产、存储、消费、确认和补偿链路中复习,再根据项目使用的中间件深入对应专题文章
2121

2222
## 适合谁看
2323

@@ -36,14 +36,16 @@ head:
3636

3737
## 建议阅读顺序
3838

39-
1. [消息队列基础知识总结](./message-queue.md):先理解 MQ 的通用模型、应用场景和常见问题。
40-
2. [Kafka 常见问题总结](./kafka-questions-01.md):理解高吞吐日志流、分区、副本、Consumer Group 和 Rebalance。
41-
3. [RocketMQ 常见问题总结](./rocketmq-questions.md):理解业务消息场景、事务消息、定时消息、顺序消息和消息存储。
42-
4. [RabbitMQ 常见问题总结](./rabbitmq-questions.md):理解 AMQP、Exchange、消息确认、死信队列和延迟队列。
43-
5. [Disruptor 常见问题总结](./disruptor-questions.md):理解高性能内存队列、无锁设计和低延迟场景。
39+
1. [消息队列面试题总结](./message-queue-interview-questions.md):先建立可靠性、幂等、顺序、积压和选型的问题清单。
40+
2. [消息队列基础知识总结](./message-queue.md):理解 MQ 的通用模型、应用场景和常见问题。
41+
3. [Kafka 常见问题总结](./kafka-questions-01.md):理解高吞吐日志流、分区、副本、Consumer Group 和 Rebalance。
42+
4. [RocketMQ 常见问题总结](./rocketmq-questions.md):理解业务消息场景、事务消息、定时消息、顺序消息和消息存储。
43+
5. [RabbitMQ 常见问题总结](./rabbitmq-questions.md):理解 AMQP、Exchange、消息确认、死信队列和延迟队列。
44+
6. [Disruptor 常见问题总结](./disruptor-questions.md):理解高性能内存队列、无锁设计和低延迟场景。
4445

4546
## 核心文章
4647

48+
- [消息队列面试题总结](./message-queue-interview-questions.md):按消息生命周期串联通用高频题、主流中间件原理、技术选型和项目追问。
4749
- [消息队列基础知识总结](./message-queue.md):系统讲解应用场景、消息模型、消息可靠性、幂等性、顺序性、积压处理和技术选型。
4850
- [Kafka 常见问题总结](./kafka-questions-01.md):覆盖 Broker、Topic、Partition、Consumer Group、零拷贝、顺序写、ACK、ISR 和 Rebalance。
4951
- [RocketMQ 常见问题总结](./rocketmq-questions.md):覆盖 NameServer、Broker、Proxy、普通消息、顺序消息、事务消息、定时消息和存储机制。
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
---
2+
title: 2026 最新消息队列面试题总结:可靠性、幂等、顺序、积压与选型
3+
description: 2026 最新消息队列面试题和复习路线,覆盖异步、解耦、削峰、消息可靠性、重复消费、幂等、顺序消息、消息积压、Kafka、RocketMQ、RabbitMQ 和技术选型等高频考点。
4+
category: 高性能
5+
tag:
6+
- 消息队列
7+
- 面试题
8+
- 高性能
9+
head:
10+
- - meta
11+
- name: keywords
12+
content: 消息队列面试题,MQ面试题,消息可靠性,重复消费,消息幂等,顺序消息,消息积压,Kafka面试题,RocketMQ面试题,RabbitMQ面试题,消息队列选型
13+
---
14+
15+
消息队列面试通常从“为什么使用 MQ”开始,随后沿着一条消息的生命周期继续追问:生产者发送超时后能不能重试?Broker 返回成功是否代表消息不会丢?消费者处理成功但确认失败会发生什么?重复消费、顺序错乱和消息积压又该怎样处理?
16+
17+
这篇文章是 JavaGuide 消息队列专题的复习入口,按使用场景、消息可靠性、主流中间件和技术选型四部分整理。每部分只列复习时需要抓住的问题,完整答案和实现细节放在对应专题文章中。
18+
19+
时间比较紧的话,可以先看面试突击版的[消息队列常见面试题总结](https://interview.javaguide.cn/high-performance/message-queue-interview-questions.html),把讲不清楚的问题标出来,再回到本文补原理和工程细节。
20+
21+
## 复习时先抓住哪些问题?
22+
23+
| 模块 | 需要讲清楚的内容 | 常见追问方向 |
24+
| -------------- | ------------------------------------------------------ | ------------------------------------------------------- |
25+
| 使用场景与限制 | 为什么使用 MQ,哪些链路不适合改成异步 | 异步、解耦、削峰、最终一致性、RPC 与 MQ |
26+
| 可靠性与语义 | 消息从生产到消费的每个环节怎样确认、重试和恢复 | 消息丢失、重复消费、幂等、顺序、重试、死信、积压 |
27+
| 中间件原理 | 主流 MQ 怎样组织消息、复制数据并协调消费者 | Kafka、RocketMQ、RabbitMQ、分区、副本、消费组、确认机制 |
28+
| 选型与治理 | 怎样结合业务能力、运维经验和故障目标选择并管理消息队列 | 吞吐、延迟、回放、事务消息、监控、扩容、容灾、Disruptor |
29+
30+
回答消息可靠性问题时,不能只报一个配置项。生产者确认、Broker 持久化与复制、消费者确认、业务幂等和补偿对账需要一起说明;任何一段处理不完整,都可能表现为消息丢失、重复或结果不一致。
31+
32+
## 消息队列基础与使用限制
33+
34+
消息队列把生产者和消费者之间的同步调用改成异步消息传递。主链路可以更快返回,突发流量也能暂存在 Broker 中,但系统同时增加了消息中间件、异步状态和故障恢复流程。
35+
36+
![通过异步处理提高系统性能](https://oss.javaguide.cn/github/javaguide/Asynchronous-message-queue.png)
37+
38+
相关内容:
39+
40+
- [消息队列基础知识总结](./message-queue.md)
41+
- [高性能系统设计面试题总结](../high-performance-system-interview-questions.md)
42+
43+
常见面试题:
44+
45+
- 消息队列怎样实现异步、应用解耦和削峰填谷?
46+
- 引入消息队列后,系统复杂度和数据一致性会发生什么变化?
47+
- 哪些业务适合异步处理?支付结果、库存扣减等强实时链路能否直接异步化?
48+
- RPC 和消息队列在通信方向、响应时效、耦合方式和故障处理上有什么区别?
49+
- 点对点和发布订阅模型分别适合什么场景?
50+
- 为什么不能把消息写入 MQ 就立即向用户返回“业务成功”?
51+
52+
回答“为什么使用 MQ”时,最好结合一个具体流程。例如订单创建后,哪些步骤必须同步完成,哪些通知、积分和风控任务可以异步处理;消费者失败时,用户看到的状态和后台补偿又怎样衔接。
53+
54+
## 消息可靠性与消费语义
55+
56+
消息可靠性可以沿着生产者、Broker、消费者和业务处理四段来回答。生产者要确认消息是否被接收,Broker 要考虑持久化与副本,消费者要在业务完成后确认,业务侧还要处理重复和结果不确定。
57+
58+
![队列模型](https://oss.javaguide.cn/github/javaguide/high-performance/message-queue/message-queue-queue-model.png)
59+
60+
相关内容:
61+
62+
- [消息队列基础知识总结](./message-queue.md)
63+
- [Kafka 常见问题总结](./kafka-questions-01.md)
64+
- [RocketMQ 常见问题总结](./rocketmq-questions.md)
65+
- [RabbitMQ 常见问题总结](./rabbitmq-questions.md)
66+
67+
常见面试题:
68+
69+
- At Most Once、At Least Once 和 Exactly Once 分别表示什么?
70+
- 一条消息在哪些环节可能丢失?每个环节怎样降低风险?
71+
- 为什么 At Least Once 容易产生重复消息?消费者如何保证业务幂等?
72+
- 消息 ID 去重为什么不能完全代替业务唯一键?
73+
- 怎样保证同一订单或同一用户的消息按顺序处理?
74+
- 消费失败后,哪些错误适合重试,哪些消息应该进入死信队列?
75+
- 消息积压时,怎样区分生产流量突增、消费者变慢、分区不足和下游故障?
76+
77+
顺序、可靠性和吞吐往往相互影响。同一业务键固定到一个队列或分区可以保证局部顺序,但也会限制并行度;同步刷盘和更多副本能够降低数据丢失风险,同时会增加写入延迟和资源开销。
78+
79+
## Kafka 高频问题
80+
81+
Kafka 的高频题主要围绕分区、副本、消费组、可靠性和高吞吐设计展开。回答时要把 Producer、Broker、Partition、Replica、Consumer Group 和 Offset 放到同一条读写链路中。
82+
83+
![Kafka Topic 分区布局](https://oss.javaguide.cn/github/javaguide/high-performance/message-queue/KafkaTopicPartionsLayout.png)
84+
85+
相关内容:[Kafka 常见问题总结](./kafka-questions-01.md)
86+
87+
常见面试题:
88+
89+
- Topic、Partition、Replica、Consumer Group 和 Offset 分别承担什么职责?
90+
- Kafka 为什么只能保证单个 Partition 内有序?业务 Key 应该怎样选择?
91+
- Leader、Follower、ISR、HW 和 LEO 之间是什么关系?
92+
- `acks=all`、副本数和 `min.insync.replicas` 应该怎样配合?
93+
- Kafka 为什么吞吐量高?顺序写、Page Cache、零拷贝、批处理和压缩分别起什么作用?
94+
- Kafka 的幂等生产者和事务解决了什么问题?Exactly Once 能否覆盖外部数据库?
95+
- Kafka 4.0 为什么只支持 KRaft?它和早期 ZooKeeper 模式有什么区别?
96+
- Rebalance 会带来哪些影响?怎样减少不必要的重平衡?
97+
98+
Kafka 参数不能孤立记忆。比如 `acks=all` 等待的是当前 ISR 中满足条件的副本确认,不等于所有配置副本都已经落盘;消费成功后何时提交 Offset,也会直接影响重复消费和消息丢失风险。
99+
100+
## RocketMQ 高频问题
101+
102+
RocketMQ 面试通常更贴近业务消息场景,事务消息、延时消息、顺序消息和消息存储是常见追问。复习时可以从消息怎样经过 NameServer、Producer、Broker 和 Consumer 开始,再进入 CommitLog、ConsumeQueue 和刷盘复制机制。
103+
104+
相关内容:[RocketMQ 常见问题总结](./rocketmq-questions.md)
105+
106+
常见面试题:
107+
108+
- NameServer、Broker、Producer、Consumer 和 Proxy 分别负责什么?
109+
- NameServer 节点之间不通信,怎样提供路由发现能力?
110+
- CommitLog、ConsumeQueue 和 IndexFile 分别保存什么数据?
111+
- RocketMQ 事务消息中的半消息、提交、回滚和事务回查怎样配合?
112+
- 延时消息和定时消息适合哪些场景?消费者为什么仍要检查业务状态?
113+
- RocketMQ 怎样保证同一业务分组内的消息有序?
114+
- 同步刷盘、异步刷盘、同步复制和异步复制分别影响什么?
115+
- 消息堆积后,增加消费者为什么不一定能提高处理速度?
116+
117+
事务消息解决本地事务与消息发送之间的协调,不能替消费者完成幂等和补偿。Broker 回查得到的仍然是生产者本地事务状态,消费者重复执行、下游失败和业务对账需要另行处理。
118+
119+
## RabbitMQ 高频问题
120+
121+
RabbitMQ 重点考察 AMQP 路由模型、确认机制、死信与延迟队列,以及不同队列类型的可靠性。Exchange、Routing Key、Binding 和 Queue 的关系必须先讲清楚。
122+
123+
![RabbitMQ 核心架构与消息生命周期](https://oss.javaguide.cn/github/javaguide/high-performance/rabbitmq/rabbitmq-core-architecture-and-message-lifecycle-flow.png)
124+
125+
相关内容:[RabbitMQ 常见问题总结](./rabbitmq-questions.md)
126+
127+
常见面试题:
128+
129+
- direct、fanout、topic 和 headers Exchange 分别怎样路由消息?
130+
- Publisher Confirms 能确认到哪个环节?消息无法路由到队列时怎样发现?
131+
- 持久化 Exchange、Queue 和 Message 是否足以保证消息不丢?
132+
- 手动 ACK、NACK、重新入队、重试和死信队列怎样配合?
133+
- TTL 加死信交换器实现延迟消息时,为什么可能出现队头阻塞?
134+
- Classic Queue、Quorum Queue 和 Stream 分别适合什么场景?
135+
- RabbitMQ 集群部署多个节点,是否意味着队列消息已经拥有副本?
136+
- Ready、Unacked、消息年龄、确认速率和副本状态应该怎样监控?
137+
138+
Publisher Confirm 只说明 Broker 已经处理这次发布,消息是否进入目标业务队列还要看路由结果。消费者确认也只能说明消费端接受了处理结果,业务数据库是否正确写入仍需由事务、幂等和补偿保证。
139+
140+
## 消息队列选型与项目追问
141+
142+
选型时先确认业务需要什么消息语义,再看团队是否具备对应的部署和故障处理经验。只比较单机吞吐量,很难得到可靠结论。
143+
144+
相关内容:
145+
146+
- [消息队列基础知识总结](./message-queue.md)
147+
- [Disruptor 常见问题总结](./disruptor-questions.md)
148+
149+
常见面试题:
150+
151+
- Kafka、RocketMQ 和 RabbitMQ 在消息模型、吞吐、延迟、回放和运维上有什么区别?
152+
- 日志流、订单事件、复杂路由和延时任务分别适合哪类产品?
153+
- 公司已经稳定运行一种 MQ 时,什么情况下值得引入另一种产品?
154+
- 消息队列应该监控哪些生产、存储、消费和业务指标?
155+
- Broker、消费者或下游依赖故障后,系统怎样降级和恢复?
156+
- Disruptor 和分布式消息队列有什么区别?
157+
158+
项目追问通常会落到具体数字和异常处理:峰值生产速率、消费延迟、分区或队列数量、消息保留时间、最大重试次数、积压告警阈值和故障恢复过程。没有参与过的配置和事故按学习结果回答即可,不要编造线上数据。
159+
160+
## 按准备时间安排复习
161+
162+
| 剩余时间 | 建议安排 | 复习目标 |
163+
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
164+
| 1~2 天 | 先过一遍[消息队列常见面试题总结](https://interview.javaguide.cn/high-performance/message-queue-interview-questions.html),优先补可靠性、幂等、顺序和积压 | 能沿消息生命周期回答高频问题 |
165+
| 3~7 天 | 在通用问题之外,重点学习项目实际使用的一种 MQ,再补另外两种产品的定位和主要差异 | 能回答产品原理、异常处理和选型追问 |
166+
| 1 周以上 | 按本文顺序阅读专题文章,画出生产、存储、复制、消费、确认和补偿链路,并结合项目整理监控与故障恢复过程 | 能从业务要求讲到配置、取舍和运维 |
167+
168+
<!-- @include: @article-footer.snippet.md -->

0 commit comments

Comments
 (0)