4.21-RocketMQ八股文

7 阅读3分钟

🚀 RocketMQ 八股文面试总结


1. RocketMQ 的核心组成有哪些?

  • NameServer:注册中心,保存 Broker 的路由信息,Producer/Consumer 从它获取路由信息。
  • Broker:消息中转站,存储和转发消息。
  • Producer:生产者,发送消息到 Broker。
  • Consumer:消费者,从 Broker 拉取消息。
  • Topic:消息的分类标识。
  • MessageQueue:每个 Topic 下分为多个队列。

2. RocketMQ 的消息发送流程?

  1. Producer 启动并从 NameServer 获取 Topic 路由。
  2. 选择一个 Broker 和队列(轮询或 hash)。
  3. 向 Broker 发送消息。
  4. Broker 存储消息并返回结果。

3. RocketMQ 支持的消息类型有哪些?

  • 同步消息(Sync) :发送后等待 Broker 响应,适用于重要通知。
  • 异步消息(Async) :发送后注册回调,不阻塞主线程,适用于响应时间敏感业务。
  • 单向消息(One-way) :只发送不关心结果,适用于日志收集等。
  • 顺序消息:按顺序投递和消费,适用于订单流程等。
  • 延迟消息:定时发送,支持固定延迟等级。
  • 事务消息:用于分布式事务场景。

4. RocketMQ 的消息存储机制?

  • 消息写入 CommitLog(顺序写磁盘),然后异步刷盘或同步刷盘。
  • ConsumeQueue 是消费索引文件,存储消息偏移量等信息。
  • IndexFile 是消息索引文件,支持通过 key 查找消息。

5. RocketMQ 的消费模式?

  • 集群模式(Clustering) :多实例消费同一消息只会被一个实例消费。
  • 广播模式(Broadcasting) :所有实例都消费一遍消息。

6. RocketMQ 如何实现顺序消息?

  • 顺序消息关键在于 相同消息要进入同一个队列
  • Producer 使用 MessageQueueSelector 来选择队列。
  • Consumer 设置为顺序消费,单线程顺序读取。

7. RocketMQ 如何保证消息不丢?

  1. 同步刷盘:消息写入磁盘才算成功。
  2. ACK 机制:Broker 返回写成功 Producer 才认为发送成功。
  3. Master-Slave 复制:防止主节点宕机导致数据丢失。
  4. 重试机制:发送失败自动重试。
  5. 消息重投:消费失败会重试消费。

8. RocketMQ 如何实现消息重试?

  • 消费失败返回 ConsumeConcurrentlyStatus.RECONSUME_LATER
  • Broker 会延迟重试,默认最多重试 16 次。
  • 超过次数消息进入 死信队列(DLQ)

9. RocketMQ 的高可用如何实现?

  • NameServer 多实例部署(无状态,互为备份)。
  • Broker Master-Slave 架构,支持异步/同步复制。
  • Producer/Consumer 端有重试和自动切换机制

10. RocketMQ 的事务消息机制?

  • 采用 两阶段提交

    1. 发送半消息(暂不投递给消费者)。
    2. 执行业务逻辑。
    3. 根据业务执行结果,执行 commit 或 rollback。
  • 提交失败由 Broker 回查(定时调用 Producer 的回查接口)。


11. RocketMQ 和 Kafka 的区别?

对比项RocketMQKafka
消息模型支持多种(事务、延迟、顺序)主要是日志流模型
存储机制CommitLog 顺序写基于 segment files
高可用架构Master-Slave多副本 + 控制器
消息顺序原生支持顺序消息要靠单分区才能实现
延迟消息支持(内置 delayLevel)需要配合定时任务实现
社区活跃度阿里主导,开源度高社区更活跃,生态丰富

12. 如何避免消息重复消费?

  • 消费端需做 幂等性设计(如:唯一事务编号 + 去重表)。
  • 使用业务主键做幂等判断。
  • RocketMQ 本身不能 100% 保证不重复,只能保证 至少一次