面试题答案
一键面试ISR机制工作原理
- 副本同步过程:
- 在Kafka中,每个分区都有一个领导者副本(Leader Replica)和多个追随者副本(Follower Replica)。生产者发送消息到Kafka集群时,消息首先被发送到分区的领导者副本。
- 追随者副本通过向领导者副本发送Fetch请求来获取新的消息,从而进行同步。领导者副本会为每个追随者副本维护一个HW(High Watermark),表示该追随者副本已经成功同步到的消息偏移量。追随者副本在同步时,会将自己的LSO(Log Start Offset)和领导者副本的HW进行比较,然后获取从LSO到HW之间的消息。
- 当追随者副本成功拉取到消息并写入本地日志后,它会更新自己的HW。
- ISR集合维护:
- ISR(In - Sync Replicas)是与领导者副本保持同步的追随者副本集合。Kafka动态地维护这个集合。
- 领导者副本会定期检测追随者副本的同步状态。如果一个追随者副本与领导者副本的消息滞后量(通常用消息偏移量差值衡量)在一定范围内,并且该追随者副本在一定时间内有向领导者副本发送Fetch请求(表明它是活跃的),那么这个追随者副本就会被包含在ISR集合中。
- 如果一个追随者副本长时间没有向领导者副本发送Fetch请求,或者其消息滞后量超过了一定阈值,领导者副本会将该追随者副本从ISR集合中移除。当这个追随者副本重新恢复同步,满足ISR的条件时,又会被重新添加到ISR集合中。
与ISR机制相关的关键参数及其对容错性的影响
- replica.lag.time.max.ms:
- 含义:这个参数定义了追随者副本与领导者副本之间允许的最大滞后时间。如果一个追随者副本在超过这个时间内没有向领导者副本发送Fetch请求,它将被认为是“滞后”的,并可能从ISR集合中移除。
- 对容错性影响:设置过小,可能会导致一些暂时网络波动的追随者副本频繁被移出ISR集合,降低了集群的容错能力,因为ISR集合中的副本数量减少意味着可用于容错的副本减少。设置过大,可能会使得一些实际上已经故障的副本长时间留在ISR集合中,当领导者副本发生故障时,可能会选举出一个数据不完整的副本成为新的领导者,影响数据的一致性和容错性。
- replica.lag.max.messages:
- 含义:此参数表示追随者副本与领导者副本之间允许的最大消息滞后数量。如果一个追随者副本落后领导者副本的消息数量超过这个值,它会被从ISR集合中移除。
- 对容错性影响:设置过小,可能因为正常的网络拥塞或短暂的性能问题,使得一些追随者副本被移出ISR,降低容错能力。设置过大,可能会让已经严重滞后的副本留在ISR中,同样在领导者选举时可能选出数据不完整的副本,影响容错和数据一致性。
- min.insync.replicas:
- 含义:指定了ISR集合中必须包含的最小副本数量,才能认为分区是“可用”的。当生产者发送消息时,只有ISR集合中的副本数量大于或等于这个值,生产者才会收到消息发送成功的确认。
- 对容错性影响:值设置越高,集群的容错能力越强,因为有更多的副本可用于应对故障。但同时,过高的值可能会导致在一些网络或硬件故障情况下,分区更容易变为不可用状态,影响系统的可用性。例如,如果设置为3,当ISR集合中副本数量小于3时,生产者发送消息会失败,即使此时可能还有部分副本是正常的。