Skip to content
章节导航

RocketMQ 主从同步知识点

  • Broker 分为 master 与 slave,一个 master 可以对应多个 Slave,但一个 slave 只能对应一个 master。

  • master 与 slave 通过相同的 Broker Name来匹配,不同的 brokerId来定义是 master 还是 slave

  • Broker 向所有的 NameServer 结点建立长连接,定时注册 Topic 和发送元数据信息。

  • NameServer 定时扫描(默认2分钟)所有存活broker的连接,如果超过时间没响应则断开连接(心9跳检测),但是 consumer 客户端不能感知,consumer 定时(30s)从NameServer获取 topic 的最新信息,所以broker不可用时,consumer 最多最需要 30s 才能发现(Producer 的机制一样,在未发现 broker 宕机前发送的消息会失败)

  • 只有 master 才能进行写入操作,slave 不允许写入只能同步,同步策略取决于 master 的配置

  • 客户端消费可以从 master 和 slave 消费,默认消费者都从 master 消费,如果在 master 挂后,客户端从 NameServer 中感知到 Broker 宕机,就会从 slave 消费,感知非实时,存在一定的滞后性,slave 不能保证 master 的消息 100% 都同步过来了,会有少量的消息丢失。但一旦master恢复,未同步过去的消息会被最终消费掉

  • 如果 consumer 实例的数量比 message queue 的总数量还多的话,多出来的 consumer 实例将无法分到 queue,也就无法消费到消息,也就无法起到分摊负载的作用,所以需要控制让 queue 的总数量大于等于 consumer 的数量