跳到主要内容

RocketMQ 原理

这里整理了一些大厂常见的 RocketMQ 面试题,帮助准备 Go 开发工程师面试。

1. RocketMQ ACK 机制详解

面试题:

Q1: RocketMQ 中的 ACK 机制是什么?有哪几种模式?

答案要点:

  • ACK(Acknowledgment)机制是消费者向消息队列发送确认信号,告知消息已被成功消费
  • 目的:确保消息可靠性传递,防止消息丢失或重复消费
  • 两种模式:自动 ACK 和手动 ACK

Q2: 自动 ACK 和手动 ACK 的区别是什么?各自适用什么场景?

答案要点:

  1. 自动 ACK 模式(Auto ACK)

    • 消费者成功处理消息后,RocketMQ 自动标记为已消费
    • 适用于简单业务场景,无需手动确认
    • 缺点:无法手动处理异常情况
  2. 手动 ACK 模式(Manual ACK)

    • 需要手动调用 ACK 方法确认消息消费结果
    • 更灵活,可根据业务逻辑决定确认时机
    • 可处理消费过程中的异常情况

Q3: 手动 ACK 模式下,如果消费者未确认消息会发生什么?

答案要点:

  • 如果在一定时间内未确认,RocketMQ 会将消息重新发送给其他消费者
  • 确保消息不会丢失
  • 异常情况需要进行消息重试或进入死信队列处理

2. Offset 位移机制

面试题:

Q4: RocketMQ 中的 Offset 是什么?何时进行位移?

答案要点:

  • Offset 是消息在队列中的位置标识
  • 用于记录消费者的消费进度
  • 支持断点续传功能

Q5: 在不同 ACK 模式下,Offset 位移的时机有什么不同?

答案要点:

  1. 自动 ACK 模式

    • 消息被消费后自动确定 Offset 位移
    • 无需手动干预
  2. 手动 ACK 模式

    • 只有在调用 ACK 方法确认后才更新 Offset
    • 调用 ACK 前,Offset 位移不变

Q6: 如何实现基于 Offset 的断点续传?

答案要点:

  • 消费者保存或记录消费的 Offset 位移
  • 重启后指定之前的 Offset 位移继续消费
  • 每个消息队列都有独立的 Offset 位移

3. Broker 复制原理

面试题:

Q7: RocketMQ 如何实现高可用?Broker 复制原理是什么?

答案要点:

  • 采用主从复制(Master-Slave Replication)
  • 一个主节点 + 多个从节点
  • 主节点负责写入,从节点负责复制

Q8: 详细描述 Broker 主从复制的流程?

答案要点:

  1. 主节点写入消息

    • 接收生产者消息并写入磁盘
    • 消息数据同步到内存缓冲区
    • 写入 CommitLog 文件
  2. 从节点复制数据

    • 异步拉取主节点消息数据
    • 写入自己的 CommitLog 文件
    • 实现数据同步和复制
  3. 数据一致性保证

    • 基于写入位置保证一致性
    • 主节点记录消息写入位置
    • 从节点从相应位置开始复制
  4. 选举与切换

    • 通过 NameServer 协调
    • 主节点故障时选举新主节点
    • 从节点更新复制进度到新主节点

Q9: 主从切换的详细流程是什么?

Q10: RocketMQ 的复制机制如何保证数据一致性?

答案要点:

  • 基于写入位置(Offset)的一致性保证
  • 主节点记录每条消息的写入位置
  • 从节点根据位置信息进行精确复制
  • 异步复制提高性能,同时保证最终一致性

Q11: 在 Go 项目中如何监控 RocketMQ 的主从复制状态?

答案要点:

  • 监控主从延迟指标
  • 检查复制进度差异
  • 使用 RocketMQ 提供的管理接口
  • 实现自定义健康检查机制

这些面试题涵盖了 RocketMQ 的核心机制,通过时序图和流程图帮助理解复杂的交互过程。在实际面试中,面试官可能会深入询问实现细节、性能优化、异常处理等方面的问题。