面试题答案
一键面试- 集群管理:
- 节点注册与发现:Kafka 集群中的每个 Broker 启动时,会在 Zookeeper 上创建一个临时节点(例如
/brokers/ids/<brokerId>
)。Zookeeper 通过这些节点来管理 Kafka 集群中 Broker 的存活状态,其他 Broker 和客户端可以通过监听这些节点来发现新加入或离开的 Broker,从而实现动态感知集群的变化。 - Controller 选举:Kafka 集群中的 Controller 负责管理集群的元数据变更,如主题创建、删除,分区重分配等操作。Zookeeper 使用选举机制(如 Zab 协议)从所有 Broker 中选举出一个 Controller。当 Controller 所在的 Broker 宕机时,Zookeeper 会触发新一轮的 Controller 选举,保证集群管理功能的持续可用。
- 节点注册与发现:Kafka 集群中的每个 Broker 启动时,会在 Zookeeper 上创建一个临时节点(例如
- 主题与分区管理:
- 主题元数据存储:Zookeeper 存储了 Kafka 主题的元数据信息,包括主题的配置、分区数量等(存储在
/brokers/topics/<topic>
节点下)。这些信息为 Kafka 集群的正常运行和客户端的操作提供了重要依据。 - 分区状态管理:每个分区在 Zookeeper 中有对应的节点(如
/brokers/topics/<topic>/partitions/<partitionId>
),记录了该分区的 leader 副本所在的 Broker 以及 ISR(In - Sync Replicas)集合等状态信息。这有助于 Kafka 集群进行副本管理和故障恢复,确保数据的一致性和高可用性。
- 主题元数据存储:Zookeeper 存储了 Kafka 主题的元数据信息,包括主题的配置、分区数量等(存储在
- 消费者管理:
- 消费者组注册:消费者组在 Zookeeper 上创建一个持久节点(如
/consumers/<group>
),用于标识该消费者组的存在。消费者组中的每个消费者实例在该节点下创建一个临时子节点(如/consumers/<group>/ids/<consumerId>
),以便 Zookeeper 跟踪消费者组内各个消费者的状态。 - 分区分配:Zookeeper 辅助 Kafka 实现消费者组对主题分区的分配。消费者组协调者(Consumer Group Coordinator)利用 Zookeeper 上存储的消费者组和分区信息,按照一定的分配策略(如 Range、Round Robin 等)将主题的分区分配给消费者组内的各个消费者,确保每个分区在同一时间只能被消费者组内的一个消费者消费,实现负载均衡。
- 消费者组注册:消费者组在 Zookeeper 上创建一个持久节点(如