Broker Discovery和Zookeeper

Broker Discovery - 客户端如何发现所有Broker

每个Kafka Broker都是boostrap server——客户端只要连接到一个broker,该Broker就会返回整个集群的broker列表,客户端后续可以连接到任意Broker上。

原理在于,Kafka每个broker都知道其他broker的信息、所有的topic和partition信息,这些信息都是从Zookeeper获取到的。

image-20201206083704714


Zookeeper

ZooKeeper最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。
关于ZooKeeper这个项目的名字,其实也有一段趣闻。在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(例如著名的Pig项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家RaghuRamakrishnan开玩笑地说:“在这样下去,我们这儿就变成动物园了!”此话一出,大家纷纷表示就叫动物园管理员吧 一一 因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了,而ZooKeeper正好要用来进行分布式环境的协调。于是,ZooKeeper的名字也就由此诞生了。

ZooKeeper提供服务时需要通过集群来实现,ZooKeeper集群中有一个leader,多个follower角色,其中leader提供写服务,follower提供读服务。

ZooKeeper主要用来协调Kafka的各个broker,不仅可以实现broker的负载均衡,而且当增加了broker或者某个broker故障了,ZooKeeper将会通知生产者和消费者,这样可以保证整个系统正常运转。

  • 默认zookeeper节点数量为奇数,例如3、5、7.
  • 从v0.10版本以后,zookeeper就不再存储consumer offset了。

image-20201206084244738