面试题答案
一键面试数据恢复一般流程
- 检测故障:Kafka 集群通过 ZooKeeper 来检测节点故障。ZooKeeper 会监控每个 Kafka 节点的心跳,当某个节点长时间没有发送心跳时,ZooKeeper 会判定该节点故障,并通知其他 Kafka 节点。
- 副本重新分配:Kafka 采用副本机制来保证数据的高可用性。当一个节点故障后,Kafka 会自动将该节点上的分区副本重新分配到其他存活的节点上。这一过程由 Kafka 控制器(通常是集群中选举出的一个 broker 担任)负责协调。
- 数据同步:新分配到分区副本的节点会从其他拥有该分区最新数据的副本节点上进行数据同步。同步过程中,新副本节点会向主副本节点请求数据,主副本节点会根据请求发送相应的数据日志段,新副本节点将这些数据追加到自己的日志文件中,直至追上主副本的进度。
- 恢复正常运行:当所有分区副本都完成数据同步并且达到稳定状态后,集群恢复正常运行,客户端可以继续正常读写数据。
关键 Kafka 机制
- 副本机制:Kafka 每个分区可以配置多个副本,其中一个副本为主副本(Leader),其他为从副本(Follower)。主副本负责处理所有的读写请求,从副本会定期从主副本同步数据。当主副本所在节点故障时,从副本中的一个会被选举为新的主副本,保证数据的可用性和一致性。
- ZooKeeper 协调:ZooKeeper 在 Kafka 集群中扮演着重要角色,它负责管理集群的元数据信息,包括节点状态、分区分配等。通过监控节点的心跳,ZooKeeper 能够及时发现节点故障,并协助 Kafka 控制器进行副本重新分配和选举等操作。
- 控制器选举:Kafka 集群中的控制器负责管理分区和副本的状态变化。当一个节点故障时,控制器会协调副本重新分配和选举新的主副本。如果当前控制器所在节点发生故障,集群会通过 ZooKeeper 选举出一个新的控制器来继续管理集群。
- 日志复制:Kafka 使用基于日志的复制协议来保证副本之间的数据一致性。主副本将数据写入本地日志后,会等待一定数量的从副本同步完成,才会确认消息写入成功。这种机制确保了即使某个节点故障,数据也不会丢失,并且新选举的主副本能够拥有完整的数据。