MST

星途 面试题库

面试题:消息队列中RocketMQ与Kafka在架构设计上,针对高可用性的实现方式有何不同?

请阐述RocketMQ和Kafka架构中为保证高可用性所采用的核心机制,例如主从结构、副本策略等方面的差异。
43.1万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

RocketMQ

  1. 主从结构
    • RocketMQ采用Master - Slave结构,一个Master可以对应多个Slave。Master负责处理读写请求,Slave主要用于数据备份。
    • 主从之间通过同步或异步方式进行数据复制。同步复制时,Master等待Slave确认消息已成功写入后才返回成功响应给生产者,保证数据不丢失,但可能会影响性能;异步复制时,Master在消息写入自身后就返回成功响应给生产者,由Slave异步拉取消息进行数据同步,这种方式性能较高,但存在一定的数据丢失风险。
  2. 副本策略
    • RocketMQ的副本策略基于主从结构。当Master发生故障时,Slave可以切换为Master继续提供服务。但在实际应用中,RocketMQ的主从切换相对复杂,需要人工干预或者依赖外部工具进行切换。
    • 副本数据一致性方面,通过上述同步和异步复制策略来平衡数据一致性和性能。同步复制能保证强一致性,而异步复制在性能优先的场景下可能会出现短暂的数据不一致,但最终会达到一致。

Kafka

  1. 主从结构
    • Kafka采用Broker集群架构,每个Topic被划分为多个Partition,每个Partition有一个Leader和多个Follower。Leader负责处理该Partition的读写请求,Follower从Leader同步数据。
    • 所有的Broker都可以平等地参与集群管理,通过Zookeeper来协调集群中各节点的状态和选举。
  2. 副本策略
    • Kafka的副本策略基于Partition级别。当Leader发生故障时,Kafka会自动从Follower中选举出新的Leader,整个过程自动且快速,无需人工干预。
    • 数据一致性方面,Kafka引入ISR(In - Sync Replicas)机制。只有在ISR中的副本才被认为是与Leader保持同步的,生产者发送消息到Leader时,只有当ISR中的所有副本都成功写入消息后,Leader才会返回成功响应给生产者,保证了数据的一致性。同时,Kafka的设计允许生产者配置不同的ACK级别,如ACK = 0(不等待任何副本确认)、ACK = 1(等待Leader确认)、ACK = - 1或ACK = all(等待ISR中所有副本确认),以在性能和数据一致性之间进行权衡。

差异总结

  1. 主从结构方面
    • RocketMQ是基于Broker层面的Master - Slave结构;Kafka是基于Partition层面的Leader - Follower结构,且所有Broker在集群管理上相对平等。
  2. 副本策略方面
    • 主从切换上,RocketMQ主从切换相对复杂,可能需要人工干预;Kafka能自动快速进行Leader选举。
    • 数据一致性保障上,RocketMQ通过同步/异步复制策略平衡一致性和性能;Kafka通过ISR机制和可配置的ACK级别来保障一致性和性能的平衡。