RocketMQ 如何保证高可用性?有哪些机制?

RocketMQ主要通过以下几个方面来保证高可用性:

  1. 主从部署:在Broker层面,一个Master可以对应多个Slave,当Master宕机时,Slave会自动接管并转变为Master,继续提供服务。
  2. NameServer集群:多个NameServer节点组成集群,当某个节点宕机时,Producer和Consumer可以切换到其他节点,RocketMQ整个系统可以继续工作。
  3. 事务消息:通过事务消息机制实现生产者与Broker的二段提交,保证消息不会丢失或重复消费。
  4. 生产者重试机制:在发生网络异常时,生产者会自动重试发送消息,确保消息能到达Broker。
  5. 消费者消费重试与拉取重试:在Push模式下,如果Consumer端网络异常导致消息未消费,Broker会定期重推消息;在Pull模式下,Consumer会定期重试拉取消息,保证消息被消费。
  6. 消息持久化:Broker将接收到的所有消息持久化写入CommitLog,防止消息丢失。
  7. 容错与恢复:Broker在启动过程中和运行中会定期检查自身状态并进行数据恢复,保证系统高可用。

这些机制对应的主要类:

  1. HAService:主从部署服务,实现主从切换与消息同步。
  2. NameServerController:NameServer节点会相互注册为对方的子节点,形成集群。
  3. EndTransactionProcessor:实现事务消息二段提交与回查。
  4. MQClientAPIImpl:实现生产者发送消息重试。
  5. RebalanceService:实现Push消费者消息分发与重试。PullConsumerImpl实现拉消息重试。
  6. DefaultMessageStore:实现消息持久化与CommitLog管理。
  7. BrokerController:启动过程检查点恢复,运行期内存数据恢复等。

RocketMQ通过主从部署、NameServer集群、事务机制、重试机制与持久化机制来保证高可用性。理解RocketMQ各个模块的高可用机制与容错机制,可以让我们在使用过程中根据业务需求配置相关参数,保证系统高可用。