一、基础概念题
1. RocketMQ的四种消息类型中,以下哪些是正确的?
RocketMQ支持四种消息类型:普通消息、顺序消息、延迟消息和事务消息。
- 普通消息:无特殊顺序或延迟要求的消息。
- 顺序消息:保证消息按发送顺序被消费。
- 延迟消息:消息发送后不立即投递,而是延迟指定时间后再消费。
- 事务消息:支持分布式事务,通过两阶段提交保证消息发送与本地事务的一致性。
2. 在RocketMQ中,以下哪些组件是消息存储的核心?
RocketMQ的消息存储核心组件是 CommitLog 和 ConsumeQueue。
- CommitLog:存储所有消息的物理文件,消息以顺序追加方式写入。
- ConsumeQueue:逻辑队列,记录消息在CommitLog中的偏移量,供消费者快速定位消息。
3. RocketMQ支持哪些消息发送模式?
RocketMQ支持三种消息发送模式:
- 同步发送:发送方发送消息后等待Broker确认,可靠性高但性能较低。
- 异步发送:发送方发送消息后无需等待Broker确认,性能较高但需处理回调。
- 单向发送:发送方只发送消息,不关心Broker是否接收成功,性能最高但可靠性最低。
4. RocketMQ中的NameServer主要负责什么?
NameServer是RocketMQ的路由注册中心,主要职责包括:
- Broker管理:接收Broker的心跳上报,维护Broker的动态路由信息。
- 路由发现:为Producer和Consumer提供Topic的路由信息(如Broker地址)。
- 轻量级设计:无状态,可横向扩展,支持动态更新路由信息。
5. RocketMQ的Broker组件支持哪些功能?
Broker是RocketMQ的核心存储和转发组件,支持以下功能:
- 消息存储:将消息持久化到磁盘(CommitLog和ConsumeQueue)。
- 消息转发:根据路由规则将消息转发给消费者。
- 消息查询:支持按消息ID或Key查询消息。
- 主从同步:通过主从复制实现高可用性。
- 流量控制:根据负载动态调整消息发送速率。
6. 在RocketMQ中,以下哪些是消息消费的模式?
RocketMQ支持两种消息消费模式:
- 集群消费(Clustering):同一Consumer Group内的消费者共享消息,每条消息只被一个消费者消费。
- 广播消费(Broadcasting):同一Consumer Group内的每个消费者都会收到所有消息。
7. RocketMQ支持哪些消息过滤方式?
RocketMQ支持两种消息过滤方式:
- Tag过滤:根据消息的Tag属性进行简单过滤(如
TagA || TagB
)。 - SQL过滤:通过SQL表达式对消息属性进行复杂过滤(需Broker配置
enablePropertyFilter=true
)。
8. RocketMQ的事务消息是如何实现的?
事务消息通过两阶段提交(2PC)实现:
- 预提交(Half Message):Producer发送事务消息到Broker,Broker暂存消息但不暴露给消费者。
- 本地事务执行:Producer执行本地事务(如数据库操作)。
- 提交或回滚:根据本地事务结果,Producer向Broker发送提交或回滚命令。
- 回查机制:若Broker未收到提交/回滚命令,会主动回查Producer确认事务状态。
9. RocketMQ的顺序消息是如何保证顺序性的?
顺序消息通过以下机制保证顺序性:
- 顺序发送:Producer按顺序发送消息到同一Queue。
- 顺序存储:Broker将同一Queue的消息顺序写入CommitLog。
- 顺序消费:Consumer从同一Queue按顺序拉取并消费消息。
- 单线程消费:每个Queue对应一个消费线程,避免并发导致的乱序。
10. 在RocketMQ中,以下哪些操作是Producer可以执行的?
Producer可以执行以下操作:
- **发送消息**:同步、异步或单向发送消息到Broker。
- **查询消息**:根据消息ID或Key查询消息状态。
- **关闭连接**:释放资源并断开与Broker的连接。
11. RocketMQ的Consumer可以执行哪些操作?
Consumer可以执行以下操作:
- **订阅消息**:根据Topic和Tag订阅消息。
- **消费消息**:拉取消息并处理业务逻辑。
- **提交消费进度**:记录消息的消费偏移量(Offset)。
- **关闭消费**:停止消费并释放资源。
12. RocketMQ的NameServer提供了哪些服务?
NameServer提供以下服务:
- **路由注册**:接收Broker上报的Topic路由信息。
- **路由查询**:为Producer和Consumer提供Topic的Broker地址列表。
- **Broker状态管理**:检测Broker的存活状态并剔除失效节点。
- **轻量级通信**:通过HTTP或RPC协议与客户端交互。
13. RocketMQ的Broker支持哪些消息存储方式?
Broker支持两种消息存储方式:
- **同步刷盘**:消息写入磁盘后返回确认,可靠性高但性能较低。
- **异步刷盘**:消息先写入内存再异步刷盘,性能高但存在丢消息风险(需配合主从同步使用)。
14. RocketMQ支持哪些消息消费的幂等性保证?
RocketMQ通过以下方式保证消息消费的幂等性:
- **唯一ID**:每条消息生成全局唯一ID,消费者通过ID去重。
- **业务去重表**:在业务层记录已处理消息的标识(如订单号),避免重复处理。
- **消费进度(Offset)**:Consumer通过提交Offset标记已消费消息,防止重复投递。
15. RocketMQ的监控指标包括哪些?
RocketMQ的关键监控指标包括:
- **TPS/QPS**:每秒发送/查询的消息数。
- **堆积量(堆积时间)**:未被消费的消息数量或最大堆积时间。
- **Broker磁盘使用率**:CommitLog和ConsumeQueue的磁盘占用。
- **主从同步延迟**:主从Broker之间的数据同步延迟。
- **拒绝率**:因流量控制或资源不足被拒绝的消息比例。
16. RocketMQ的高可用性是如何实现的?
RocketMQ通过以下机制实现高可用性:
- **主从复制**:Broker支持主从架构,Master处理读写请求,Slave同步数据。
- **故障转移**:当Master宕机时,NameServer将路由指向Slave,由Slave接管服务。
- **多副本存储**:消息可配置多副本,避免单点故障导致数据丢失。
17. RocketMQ的消息重试机制是如何工作的?
消息重试机制如下:
- **消费失败重试**:Consumer消费消息失败时,可配置重试次数(默认16次)。
- **重试队列**:重试消息会被投递到重试队列(`%RETRY%ConsumerGroup@Topic`)。
- **死信队列(DLQ)**:超过最大重试次数的消息会进入死信队列(`%DLQ%ConsumerGroup@Topic`),需人工干预处理。
18. RocketMQ的分布式事务是如何实现的?
RocketMQ通过事务消息实现分布式事务:
- **预提交阶段**:Producer发送事务消息到Broker,Broker暂存消息。
- **本地事务执行**:Producer执行本地事务(如数据库操作)。
- **提交或回滚**:根据本地事务结果,Producer向Broker发送提交或回滚命令。
- **回查机制**:若Broker未收到提交/回滚命令,会主动回查Producer确认事务状态,确保最终一致性。
19. RocketMQ的消息轨迹功能可以提供哪些信息?
消息轨迹功能记录消息的完整生命周期信息,包括:
- **生产信息**:Producer发送消息的时间、Broker地址。
- **存储信息**:消息在CommitLog中的物理位置、存储时间。
- **消费信息**:Consumer拉取消息的时间、消费状态(成功/失败)。
- **重试信息**:消息重试次数、重试原因(如消费失败)。
20. RocketMQ的消息堆积处理策略包括哪些?
消息堆积处理策略包括:
- **监控告警**:实时监控堆积量,触发阈值告警。
- **扩容消费者**:增加Consumer实例或提升消费性能。
- **优化消费逻辑**:减少单条消息处理时间,避免阻塞。
- **清理堆积消息**:对过期或无效消息进行清理或迁移。
- **流量控制**:限制Producer发送速率,避免堆积加剧。
二、架构与设计题
21. 为什么要使用消息队列?
消息队列通过解耦系统组件、异步处理任务和削峰填谷,提升系统的可扩展性、响应速度和稳定性。它允许生产者和消费者独立扩展,缓冲瞬时流量,避免后端系统过载,同时支持分布式事务和最终一致性。
22. 为什么要选择RocketMQ?
RocketMQ具有低延迟、高吞吐量、高可靠性和强一致性,支持海量消息堆积和复杂业务场景。其分布式架构支持水平扩展,提供丰富的消息类型(如顺序消息、事务消息)和灵活的部署方式,适合大规模分布式系统。
23. RocketMQ有什么优缺点?
- 优点:高可用(主从复制+Dledger)、高性能(顺序写入CommitLog)、功能丰富(多种消息模式)、生态兼容(与Spring Cloud Alibaba集成)。
- 缺点:运维复杂度高,依赖NameServer或ZooKeeper,社区活跃度低于Kafka。
24. RocketMQ的消息模型是怎样的?
RocketMQ采用发布-订阅模型,消息按Topic分类,消费者通过Group订阅Topic。支持四种消息类型:普通、顺序、事务和延时消息,满足不同场景需求。
25. RocketMQ基本架构是怎样的?
RocketMQ由四部分组成:
- NameServer:轻量级路由注册中心,无状态,支持集群部署。
- Broker:消息存储节点,分Master和Slave,支持主从同步和Dledger高可用。
- Producer:生产者,支持分布式部署和负载均衡。
- Consumer:消费者,支持推/拉模式,提供集群消费和广播消费。
26. RocketMQ的消息存储机制是如何设计的?
- CommitLog:顺序写入所有消息,支持同步/异步刷盘,保证持久化。
- ConsumeQueu