面试题答案
一键面试主从数据同步方式
- 同步双写:生产者发送消息到主节点,主节点在将消息写入本地存储后,同步发送给从节点,只有当主从节点都写入成功,才向生产者返回成功响应。这种方式能保证数据强一致性,但可能影响消息写入性能。
- 异步复制:主节点在收到生产者消息并写入本地存储后,直接向生产者返回成功响应,同时异步将消息复制给从节点。这种方式写入性能高,但在主节点故障时,可能存在部分已确认给生产者但还未同步到从节点的消息丢失风险。
主节点故障时从节点的接管流程
- 故障检测:通常由Namesrv集群负责检测主节点状态。Namesrv定期与主从节点进行心跳检测,若主节点在一定时间内未回应心跳,Namesrv判定主节点故障。
- 选举从节点:RocketMQ 4.5.0 版本开始支持 Dledger 模式实现高可用。在 Dledger 模式下,采用 Raft 协议进行从节点选举。集群中的从节点会相互通信,通过投票选出一个新的主节点。
- 角色转换:被选举出的从节点转换为主节点角色,开始承担接收生产者消息和服务消费者的任务。原集群中的其他从节点将此新主节点作为同步数据的目标,继续进行数据同步。
- 通知客户端:Namesrv在新主节点选举完成后,会更新路由信息。客户端(生产者和消费者)在下次请求Namesrv获取路由信息时,会得到新的主节点地址,从而与新主节点建立连接,继续进行消息的生产和消费。