一、什么是ZooKeeper?
ZooKeeper是一个分布式应用的开源协调服务。目的就是给用户提供同步、配置管理、分组和命名等服务。是Java语言编写的,支持Java和C两种语言。通俗的讲,它就是用来管理Hadoop、HBase、Kafka等。设计ZooKeeper就是为了减轻分布式应用程序所承担的协调任务。
1、ZooKeeper是根据分布式的进程通过共享的命名空间来进行协调的。命名空间和文件系统很像,是由一些数据寄存器组成的。不过在ZooKeeper中把这些数据寄存器叫Znode。一般普通的文件系统是基于存储设备的,但是ZooKeeper中的数据是存在内存中的。存在内存中的数据肯定是高吞吐量,低延迟的,而且ZooKeeper实现了高性能,高可靠性,有序的访问。
2、ZooKeeper的数据模型和层次命名空间
ZooKeeper和Linux系统的文件系统结构很像。都是通过"/"分隔路径。然后由每一个结点组成。
ZooKeeper中的节点Znode像树一样的维护,每一个节点包括了:数据、数据长度、创建时间、修改时间等。节点也可以看成一个目录。
Znode原子性操作的:每一个znode的数据只能原子性的操作,每一个Znode都有一个访问控制表(ACL,Access Control List)。而且Znode还存在临时结点。这些临时结点与Session同时存在,当Session生命周期结束,临时结点会被删除。一般临时结点用在Leader选举、锁服务。