面试题答案
一键面试RocketMQ
- 主从结构:
- RocketMQ采用Master - Slave结构,一个Master可以对应多个Slave。Master负责处理读写请求,Slave主要用于数据备份。
- 主从之间通过同步或异步方式进行数据复制。同步复制时,Master等待Slave确认消息已成功写入后才返回成功响应给生产者,保证数据不丢失,但可能会影响性能;异步复制时,Master在消息写入自身后就返回成功响应给生产者,由Slave异步拉取消息进行数据同步,这种方式性能较高,但存在一定的数据丢失风险。
- 副本策略:
- RocketMQ的副本策略基于主从结构。当Master发生故障时,Slave可以切换为Master继续提供服务。但在实际应用中,RocketMQ的主从切换相对复杂,需要人工干预或者依赖外部工具进行切换。
- 副本数据一致性方面,通过上述同步和异步复制策略来平衡数据一致性和性能。同步复制能保证强一致性,而异步复制在性能优先的场景下可能会出现短暂的数据不一致,但最终会达到一致。
Kafka
- 主从结构:
- Kafka采用Broker集群架构,每个Topic被划分为多个Partition,每个Partition有一个Leader和多个Follower。Leader负责处理该Partition的读写请求,Follower从Leader同步数据。
- 所有的Broker都可以平等地参与集群管理,通过Zookeeper来协调集群中各节点的状态和选举。
- 副本策略:
- 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中所有副本确认),以在性能和数据一致性之间进行权衡。
差异总结
- 主从结构方面:
- RocketMQ是基于Broker层面的Master - Slave结构;Kafka是基于Partition层面的Leader - Follower结构,且所有Broker在集群管理上相对平等。
- 副本策略方面:
- 主从切换上,RocketMQ主从切换相对复杂,可能需要人工干预;Kafka能自动快速进行Leader选举。
- 数据一致性保障上,RocketMQ通过同步/异步复制策略平衡一致性和性能;Kafka通过ISR机制和可配置的ACK级别来保障一致性和性能的平衡。