一、Zookeeper是啥
问AI,它是这么说:
ZooKeeper是一个开源的分布式协调服务。
ZooKeeper最初由雅虎研究院开发,用于解决大型分布式系统中的协调问题,特别是为了避免分布式单点故障。它被设计成一个简单易用的接口集,封装了复杂的分布式一致性协议。这使得开发者可以更专注于业务逻辑,而不是底层的协调和同步问题。
官网定义:
Apache ZooKeeper 致力于开发和维护一个支持高度可靠的分布式协调的开源服务。
zooKeeper 是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次实施它们时,都会进行很多工作来修复不可避免的 bug 和竞争条件。由于难以实现这类服务,因此应用程序最初通常会跳过它们,这会使它们在存在更改的情况下变得脆弱并且难以管理。即使部署正确,这些服务的不同实现也会导致管理复杂。
二、在kafka中有什么作用?
Kafka使用zookeeper的分布式协调服务,将生产者,消费者,broke结合在一起;借助zookeeper,kafka能够将生产者,消费者和broker在内的所有组件在无状态的条件下建立起生产者和消费者的订阅关系,实现生产者的负载均衡。
主要作用如下:
1.注册并监控broker,调整负载均衡
kafka的每个broker在启动时,都会在zk中注册,告诉zk其brokerid,保存在zk目录:broker.id/brokers/ids,当节点失效时,zk就会删除该节点,能够很方便的监控整个集群broker的变化,及时调整负载均衡。
2. 管理并维护topic、分区、broker的对应关系
在kafka中可以定义很多个topic,每个topic又被分为很多个分区。一般情况下,每个分区独立存在一个broker上,所有的这些topic-分区-broker的对应关系都有zk进行维护;
3. 消费者注册和维护
3.1 注册新的消费者
当有新的消费者注册到zk中,zk会创建专用的节点来保存相关信息,路是/consumers/{group_id}/ [ids,owners,offset],其中:
Ids:记录该消费分组有几个正在消费的消费者,
Owmners:记录该消费分组消费的topic信息,
Offset:记录topic每个分区中的每个offset
3.2 监听消费者分组中消费者的变化
监听/consumers/{group_id}/ids的子节点的变化,一旦发现消费者新增或者减少及时调整消费者,实现消费者负载均衡。