MST

星途 面试题库

面试题:消息队列 Kafka 中 Zookeeper 起到什么关键作用

请阐述在 Kafka 架构里,Zookeeper 对于 Kafka 集群的运行、管理等方面所起到的具体作用。
48.4万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

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