Kafka中ZooKeeper的传统作用(早期版本,2.8.0之前)
在Kafka早期版本中,ZooKeeper是核心分布式协调服务,承担着保障集群稳定、实现分布式协作的关键功能,具体包括:
ZooKeeper作为集中式元数据存储中心,保存了Kafka集群的核心元数据:
cleanup.policy)、保留时间(如retention.ms)等;__consumer_offsets Topic的早期存储),用于记录每条消息的消费位置。Kafka集群中的Controller是负责管理分区Leader选举、副本同步及Broker上下线的关键角色。ZooKeeper通过临时节点机制确保Controller的唯一性:
/controller临时节点,最终只有一个Broker成功,成为活跃Controller;ZooKeeper通过临时节点的心跳机制实时感知Broker状态:
/brokers/ids/brokerId),并定期发送心跳;ZooKeeper存储了Topic的动态配置信息(如分区数、副本因子),支持运行时修改:
kafka-topics.sh命令更新Topic配置(如--alter参数),变更信息会同步到ZooKeeper;/brokers/topics/topicName),实时获取最新配置并调整Topic状态,无需重启集群。ZooKeeper协助Kafka实现消费者组的协调与负载均衡:
/consumers/groupName),记录组成员信息;ZooKeeper通过ZAB协议(ZooKeeper Atomic Broadcast)实现强一致性,确保Kafka集群元数据变更的全局可见性:
注:从Kafka 2.8.0开始,官方推出KRaft模式(基于Raft共识算法),逐步替代ZooKeeper的部分功能(如元数据管理、Controller选举)。Kafka 3.0+版本已完全支持KRaft模式,无需依赖ZooKeeper,但旧版本仍需依赖ZooKeeper运行。