面试题答案
一键面试ISR集合概念
- ISR(In - Sync Replicas)即同步副本集合,是指与Leader副本保持“同步”状态的Follower副本集合。在Kafka中,只有ISR中的副本才有资格被选举为新的Leader。“同步”意味着这些Follower副本能够及时从Leader副本拉取数据并进行同步,其落后Leader副本的消息条数在一定阈值内。
ISR维护过程
- 副本加入ISR:
- 当一个Follower副本启动并开始从Leader副本拉取数据时,如果它能够及时跟上Leader副本的进度,即落后的消息条数不超过配置的阈值(通过参数
replica.lag.time.max.ms
和replica.lag.max.messages
控制,新版本主要依赖replica.lag.time.max.ms
),就会被添加到ISR集合中。
- 当一个Follower副本启动并开始从Leader副本拉取数据时,如果它能够及时跟上Leader副本的进度,即落后的消息条数不超过配置的阈值(通过参数
- 副本移出ISR:
- 如果Follower副本由于网络延迟、磁盘I/O问题等原因,导致它与Leader副本的同步延迟超过了
replica.lag.time.max.ms
配置的时间,或者落后Leader副本的消息条数超过了replica.lag.max.messages
(旧版本),该Follower副本就会被移出ISR集合。 - 当Follower副本恢复正常,重新追上Leader副本的进度时,又会被重新加入到ISR集合中。
- 如果Follower副本由于网络延迟、磁盘I/O问题等原因,导致它与Leader副本的同步延迟超过了
在副本同步和故障处理方面的关键作用
- 副本同步:
- 保证数据一致性:ISR集合确保了数据的一致性。只有ISR中的副本同步了数据,才能认为消息已成功提交。这样可以避免数据丢失,因为即使Leader副本发生故障,新选举的Leader也能从ISR中的副本获取到最新的数据。
- 提高同步效率:Kafka只需要与ISR中的副本进行数据同步,而不需要关注所有的Follower副本。这减少了同步的开销,因为ISR中的副本相对来说是健康且同步状态良好的。
- 故障处理:
- Leader选举:当Leader副本发生故障时,Kafka会从ISR集合中选举一个新的Leader。由于ISR中的副本与Leader保持同步,选举出的新Leader能够保证数据的完整性和一致性,最大程度减少数据丢失和不一致的风险。
- 数据恢复:在故障恢复过程中,Kafka使用ISR中的副本数据进行数据恢复。例如,如果某个Follower副本所在的节点故障,当该节点恢复后,它可以从ISR中的其他副本重新同步数据,快速恢复到故障前的状态。