一、Broker注册
Broker分布式部署,并且相互独立,但是有一个注册系统就能够将整个集群中的Broker管理起来,此时就使用了ZooKeeper。在ZooKeeper上会有一个专门用来进行 Broker 服务器列表记录的节点/brokers/ids。每个 Broker 在启动时,都会到ZooKeeper上进行注册,即到/brokers/ids下创建属于自己的节点。
二、Topic注册
在Kafka 中,同一个Topic 消息会被分成多个分区信息,并将其分布在多个Broker 上,这些分区信息及其与 Broker 的对应关系也都是由 ZooKeeper 维护的,并由专门的节点来记录。
三、生产者负载均衡
由于同一个 Topic 消息会被分成多个分区信息,并将其分布在多个 Broker上,因此生产者需要将消息合理地发送到这些分布式的 Broker 上。那么,如何实现生产者的负载均衡?Kafka 支持传统的四层负载均衡,也支持以 ZooKeeper方式实现负载均衡。
四、消费者负载均衡
与生产者类似,Kafka 中的消费者同样需要进行负载均衡,以使多个消费者合理地从对应的 Broker 服务器上接收消息,每个消费者分组包含若干个消费者,每条消息都只会发送给消费者分组中的一个消费者,不同的消费者分组消费自己特定的Topic消息,互不干扰。
早期版本的 Kafka 用 ZooKeeper 管理 meta 信息存储、Consumer 的消费状态、Group及Offset的值。考虑ZooKeeper本身的一些因素,以及整个架构较大概率存在单点问题,新版本的 Kafaka 中逐渐弱化了 ZooKeeper 的作用。新的Consumer使用了Kafka内部的Group Coordination协议,也减小了对ZooKeeper的依赖。