消息队列 - 面试题库


一、基础题 ⭐

Q1. 消息队列的主要作用是什么?

答案:消息队列(Message Queue)的核心作用包括三个方面:解耦异步削峰。解耦指生产者和消费者不需要直接通信,通过 MQ 作为中间层降低系统间依赖;异步指将非核心流程异步化,提升主流程响应速度;削峰指在高并发场景下,将突发流量暂存到 MQ 中,消费者按自身处理能力匀速消费,避免系统被压垮。此外,MQ 还支持日志收集、数据同步等场景。

关联知识点:系统架构设计、异步编程、流量控制


Q2. 常见的消息队列产品有哪些?各自的特点是什么?

答案:主流消息队列包括:

关联知识点:消息队列选型、RabbitMQ、Kafka、RocketMQ


Q3. 什么是发布/订阅模式和点对点模式?

答案发布/订阅模式(Pub/Sub)中,生产者将消息发送到 Topic,多个消费者都可以接收到该消息,属于一对多广播模式,消息会被每个订阅者消费一次。点对点模式(P2P)中,消息发送到 Queue,只有一个消费者能获取并处理该消息,消费后消息从队列中删除,属于一对一模式。Kafka 的 Topic 采用 Pub/Sub 模式,RabbitMQ 的 Queue 采用 P2P 模式,但通过 Exchange 路由可以实现类似 Pub/Sub 的效果。

关联知识点:消息模型、Topic、Queue、Exchange


Q4. 消息队列如何保证消息的顺序性?

答案:保证消息顺序性的核心思路是将需要保证顺序的消息路由到同一个队列/分区,并由单一消费者串行处理。具体实现:

关联知识点:Kafka Partition、消息路由、消费者模型


Q5. 消息队列中的 Topic 和 Queue/Partition 是什么关系?

答案Topic 是消息的逻辑分类,生产者按 Topic 发送消息,消费者按 Topic 订阅消息。Queue/Partition 是 Topic 的物理分片。一个 Topic 可以包含多个 Queue(RabbitMQ)或 Partition(Kafka),用于水平扩展吞吐能力。在 Kafka 中,Partition 是并行消费的最小单位,Partition 数量决定了最大消费者并发数。在 RabbitMQ 中,Queue 是消息的实际存储单元,Exchange 通过路由规则将消息分发到不同的 Queue。RocketMQ 中一个 Topic 包含多个 MessageQueue,分布在不同的 Broker 上。

关联知识点:Kafka Partition、RabbitMQ Exchange、RocketMQ MessageQueue


Q6. RabbitMQ 中 Exchange 有哪几种类型?

答案:RabbitMQ 的 Exchange 有四种类型:

关联知识点:RabbitMQ 路由机制、BindingKey、RoutingKey


Q7. Kafka 的 Partition 机制有什么优势?

答案:Partition 是 Kafka 实现高吞吐的核心设计:

关联知识点:Kafka 架构、Leader 选举、消费者组


Q8. RocketMQ 的消息模型包含哪些核心概念?

答案:RocketMQ 的核心概念包括:

关联知识点:RocketMQ 架构、NameServer、Broker


二、进阶题 ⭐⭐

Q9. RabbitMQ 如何保证消息不丢失?

答案:RabbitMQ 消息不丢失需要从三个环节保障:

关联知识点:RabbitMQ 可靠性、Confirm 机制、消息持久化、ACK 机制


Q10. Kafka 的 ISR 机制是什么?

答案:ISR(In-Sync Replicas)是 Kafka 中保持与 Leader 同步的副本集合。每个 Partition 有 Leader 和多个 Follower 副本,Follower 从 Leader 拉取消息进行复制。如果 Follower 超过 replica.lag.time.max.ms(默认 30 秒)未向 Leader 发送请求,就会被移出 ISR。当 Leader 故障时,只从 ISR 中选举新 Leader,确保数据不丢失。Kafka 的 acks 参数与 ISR 相关:acks=0 不等待确认;acks=1 Leader 写入即确认;acks=all(或 -1)ISR 中所有副本写入后才确认。生产环境建议 acks=all + min.insync.replicas=2 保证可靠性。

关联知识点:Kafka 副本机制、Leader 选举、数据可靠性


Q11. Kafka 的消费者组(Consumer Group)是如何工作的?

答案:消费者组是 Kafka 实现消费负载均衡和容错的核心机制:

关联知识点:Kafka Rebalance、Offset 管理、消费模式


Q12. 如何处理消息队列中的消息积压问题?

答案:消息积压是线上常见问题,处理思路:

关联知识点:消息队列运维、消费者扩容、监控告警


Q13. RocketMQ 的事务消息是如何实现的?

答案:RocketMQ 事务消息采用两阶段提交 + 事务回查机制:

  1. 第一阶段:生产者发送 Half 消息(半消息)到 Broker,此时消息对消费者不可见。
  2. 第二阶段:生产者执行本地事务,根据结果向 Broker 发送 Commit 或 Rollback。Commit 后消息对消费者可见,Rollback 则丢弃消息。
  3. 事务回查:如果 Broker 长时间未收到第二阶段响应,会主动回调生产者,查询本地事务状态,根据结果决定 Commit 或 Rollback。 该机制保证了本地事务执行与消息发送的最终一致性,适用于分布式事务场景。

关联知识点:RocketMQ 事务消息、分布式事务、最终一致性


Q14. Kafka 的日志段(Log Segment)和索引机制是怎样的?

答案:Kafka 的每个 Partition 在磁盘上由多个 Log Segment 组成,每个 Segment 包含:

关联知识点:Kafka 存储引擎、消息检索、数据清理


Q15. RabbitMQ 的死信队列(DLX)是如何工作的?

答案:死信队列用于处理无法正常消费的消息。消息成为死信的条件:

关联知识点:RabbitMQ 死信队列、消息重试、TTL


Q16. Kafka 如何实现高性能的读写?

答案:Kafka 的高性能来自多项设计:

关联知识点:Kafka 性能优化、零拷贝、顺序写


Q17. RocketMQ 支持哪些消息类型?

答案:RocketMQ 支持多种消息类型:

关联知识点:RocketMQ 消息类型、延迟消息、顺序消息


三、高级题 ⭐⭐⭐

Q18. 如何保证消息队列中的消息不重复消费(幂等性)?

答案:消息队列本身不保证消息不重复(网络抖动、ACK 丢失等场景可能重发),因此消费者必须实现幂等性。常见方案:

关联知识点:幂等性设计、去重方案、分布式锁


Q19. Kafka 的 Rebalance 机制是什么?如何避免频繁 Rebalance?

答案:Rebalance 是消费者组内重新分配 Partition 的过程,触发条件:

关联知识点:Kafka 消费者组、Rebalance 调优、心跳机制


Q20. RocketMQ 的存储架构有什么特点?

答案:RocketMQ 采用混合存储架构

关联知识点:RocketMQ 存储、CommitLog、ConsumeQueue


Q21. 如何设计一个高可用的消息队列集群?

答案:高可用 MQ 集群设计要点:

关联知识点:高可用架构、容灾设计、监控体系


Q22. Kafka 的 Exactly-Once 语义是如何实现的?

答案:Kafka 从 0.11 版本开始支持 Exactly-Once 语义,通过以下机制实现:

关联知识点:Kafka 事务、幂等 Producer、Exactly-Once


Q23. RabbitMQ 的镜像队列和 Quorum Queue 有什么区别?

答案:两者都是 RabbitMQ 的高可用方案:

关联知识点:RabbitMQ 高可用、Raft 协议、Quorum Queue


Q24. 消息队列中消息过期的处理策略有哪些?

答案:消息过期处理策略因 MQ 而异:

关联知识点:消息生命周期、数据清理、存储策略


Q25. 如何监控消息队列的健康状态?需要关注哪些核心指标?

答案:MQ 健康监控应覆盖以下维度:

关联知识点:消息队列运维、Prometheus、监控告警、Grafana