面试题答案
一键面试ISR 概念
- ISR(In - Sync Replicas)即同步副本集合,是 Kafka 副本机制中的一个重要概念。在 Kafka 集群中,每个分区都有一个领导者副本(Leader Replica)和若干个追随者副本(Follower Replica)。ISR 是指与领导者副本保持“同步”状态的追随者副本集合。这里的“同步”意味着追随者副本能够及时从领导者副本拉取消息,并将其追加到自己的日志中,其滞后程度在 Kafka 配置的可接受范围内。
在数据同步和故障恢复中维持数据一致性
- 数据同步:
- 生产者发送消息到 Kafka 集群时,消息首先被发送到分区的领导者副本。只有当领导者副本成功将消息写入本地日志,并且 ISR 中的所有副本都成功从领导者副本拉取并写入该消息后,才会向生产者发送确认(ACK)。这种机制确保了数据在多个副本间的同步,保证了数据一致性。例如,若生产者要求
acks=all
,只有 ISR 中所有副本都同步完成消息,生产者才会收到确认,降低了消息丢失的风险。 - 追随者副本通过定期向领导者副本发送
Fetch
请求来拉取新消息,领导者副本会记录每个追随者副本的滞后情况。只要追随者副本的滞后不超过配置的阈值,就会被保留在 ISR 中。
- 生产者发送消息到 Kafka 集群时,消息首先被发送到分区的领导者副本。只有当领导者副本成功将消息写入本地日志,并且 ISR 中的所有副本都成功从领导者副本拉取并写入该消息后,才会向生产者发送确认(ACK)。这种机制确保了数据在多个副本间的同步,保证了数据一致性。例如,若生产者要求
- 故障恢复:
- 当领导者副本发生故障时,Kafka 会从 ISR 中选择一个副本作为新的领导者。由于 ISR 中的副本与原领导者副本保持同步,新领导者能够保证已确认的消息不会丢失,从而维持数据一致性。例如,如果原领导者在发送完消息但还未完全同步给所有追随者副本时就发生故障,那么只有 ISR 中的副本包含了部分已发送的消息,从 ISR 中选择新领导者可以确保这些已确认消息不丢失。
ISR 副本数量变化时 Kafka 的处理
- ISR 副本数量增加:
- 当一个原本滞后的追随者副本追上领导者副本的进度,满足进入 ISR 的条件时,它会被添加到 ISR 中。此时,Kafka 会将该副本纳入数据同步流程,领导者副本开始向它同步消息。这一过程对生产者和消费者透明,不会影响正常的读写操作。例如,一个追随者副本因为网络问题暂时滞后,网络恢复后迅速追上领导者副本,就会被重新加入 ISR。
- ISR 副本数量减少:
- 如果某个追随者副本滞后过多,超过了 Kafka 配置的阈值,它会被移出 ISR。当 ISR 中只剩下领导者副本时(极端情况),只要领导者副本正常工作,Kafka 仍然可以提供读写服务,但数据冗余和容错能力降低。若领导者副本此时发生故障,由于没有合适的同步副本,可能会导致数据丢失或服务中断。例如,若 ISR 中的某个副本所在的机器磁盘 I/O 过高,导致拉取消息过慢,就可能被移出 ISR。
- 在 Kafka 0.11.0.0 及之后版本,引入了
min.insync.replicas
配置参数。当 ISR 中的副本数量小于min.insync.replicas
时,生产者发送消息会收到错误,这有助于确保数据的可靠性,防止在副本数量过少时写入消息导致数据丢失。