一、什么是Zookeeper?
ZooKeeper 是一个开源Apache项目,提供集中式服务,用于在分布式系统中的大型集群上提供集中服务,用于维护命名和配置数据,并在分布式系统中提供灵活,强大的同步。Zookeeper 跟踪 Kafka 集群节点的状态,并跟踪Kafka主题,分区等。Zookeeper 允许多个客户端同时执行读写操作,并充当系统内的共享配置服务。
二、为什么Kafka需要用到 Zookeeper?
* Controller election
Controller 是 Kafka 生态系统中最重要的 Broker 实体之一,它还有责任维护所有分区中的 leader-follower 关系。如果节点由于某种原因而shut down,则控制器有责任告知所有 replicas 充当分区负责人,以便履行即将失败的节点上的分区负责人的职责。因此,每当一个节点关闭时,就可以选出一个新的 Controller,并且还可以确保在任何给定的时间,只有一个 Controller,并且所有的 Follower 节点都同意。
* Configuration Of Topics
有关所有 topic 的配置,包括现有 topic 列表,每个 topic 的 partitions number,所有 partition 的位置,所有 topic 的配置覆盖列表以及哪个节点是 preferred leader 等。
* Access control lists
所有topics的访问控制列表或ACL也在Zookeeper中维护。
* Membership of the cluster
Zookeeper还维护一个列表,列出在任何给定时刻正在运行的所有 brokers,并且它们是集群的一部分。