zk相当于是kafka的一个基础设施
Kafka是一种高吞吐量、可扩展的分布式发布订阅消息系统,ZooKeeper是一个分布式协调服务,用于管理和协调分布式系统中的各种资源
Zookeeper:管理broker,consumer
创建broker后,向zk注册新的broker信息,以及监测 partition leader存活性,实现在服务器正常运行下的水平拓展,Topic的注册,zk会维护broker与topic的关系,通过/brokers/topics/topic.name节点来记录
Consumer可以使用group形式消费kafka中的数据,Zookeeper会给每个consumer group一个ID,即同一份数据可以被不同的用户ID多次消费。因此这就是单播与多播的实现。以单个消费者还是以组别的方式去消费数据,由用户自己去定义。Zookeeper管理consumer的offset跟踪当前消费的offset。
Zookeepr不管理producer
只是能够提供当前broker的相关信息,Producer向zookeeper中注册watcher,了解topic的partition的消息,以动态了解运行情况,实现负载均衡
具体而言,Kafka使用ZooKeeper来进行以下操作:
协调管理:Kafka集群中的各个节点通过ZooKeeper来协调任务分配、负载均衡和故障恢复等操作。ZooKeeper充当了Kafka集群的协调者,确保集群的稳定运行。
元数据存储:Kafka使用ZooKeeper来存储和管理关于主题(topics)、分区(partitions)和消费者(consumers)等元数据的信息。这些元数据包括主题的分区分配、分区的偏移量(offset)以及消费者组的成员关系等。
服务发现:Kafka生产者和消费者在连接到Kafka集群时需要知道正确的Broker地址。ZooKeeper提供了服务发现功能,允许客户端动态地发现可用的Kafka Broker。
- Broker 的上线、下线处理;
- 新创建的 topic 或已有 topic 的分区扩容,处理分区副本的分配、leader选举;
- 管理所有副本的状态机和分区的状态机,处理状态机的变化事件;
- topic删除、副本迁移、leader切换等处理
总之,ZooKeeper在Kafka中充当了协调和元数据管理的角色,为Kafka提供了可靠性和高可用性的支持。Kafka依赖于ZooKeeper来保证集群的稳定运行,并利用其提供的功能来管理分布式系统中的各种资源
kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新。而客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。这里的客户端指的是Kafka的消息生产端(Producer)和消息消费端(Consumer)