1.Zookeeper 是什么?能做什么?
Zookeeper 是一个开源的,是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务。
可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
Zookeeper 最常用的一个使用场景就是作为注册中心,生产者将自己提供的服务注册到 Zookeeper,然后消费者从 Zookeeper 中拿到生产者的服务列表信息,然后再去调用生产者的内容数据,比如 Dubbo,Kafka 都是使用 Zookeeper 作为注册中心的。
2.说说 Zookeeper 的数据结构吧
ZooKeeper 提供的名称空间与标准文件系统的名称空间非常相似。名称是由斜杠(“ /”)分隔的一系列路径元素。ZooKeeper 命名空间中的每个 znode 均由路径标识。每个 znode 都有一个父对象,其路径是 znode 的前缀,元素少一个;此规则的例外是 root(“ /”),它没有父项。此外,与标准文件系统完全一样,如果 znode 有子节点,则无法删除它。
ZooKeeper 与标准文件系统之间的主要区别在于,每个 znode 都可以具有与之关联的数据(每个文件也可以是目录,反之亦然),并且 znode 限于它们可以拥有的数据量。ZooKeeper 旨在存储协调数据:状态信息,配置,位置信息等。这种元信息通常以千字节(如果不是字节)来度量。ZooKeeper 具有1M的内置完整性检查,以防止将其用作大型数据存储,但是通常,它用于存储小得多的数据。
Znode的三种类型:
- 持久节点(persistent node)节点会被持久
- 临时节点(ephemeral node),客户端断开连接后,ZooKeeper 会自动删除临时节点
- 顺序节点(sequential node),每次创建顺序节点时,ZooKeeper
都会在路径后面自动添加上10位的数字,从1开始,最大是2147483647 (2^32-1)
Znode的四种形式:
- 持久节点:如 create /test/a “hello”,通过 create参数指定为持久节点
- 持久顺序节点:通过 create -s参数指定为顺序节点
- 临时节点:通过 create -e参数指定为顺序节点
- 临时顺序节点:通过 create -s -e参数指定为临时及顺序节点
3.Znode里面都存储了什么?
Znode包含了存储数据(data)、访问权限(acl)、子节点引用(child)、节点状态信息(stat)