官网: https://zookeeper.apache.org/
简介:apache zookeeper 是用于分布式的高性能的协调服务,提供一种集中式的信息存储服务。
特点:数据存在内存中,类似文件系统的树形结构(文件和目录),高吞吐量和低延迟,集群高可靠。
作用:基于zookeeper可以实现分布式统一配置中心、服务注册中心,分布式锁等功能的实现。
安装Zookeeper
Ø安装1.6版本以上JDK,配置环境变量
Ø下载: https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
Ø解压后的conf目录,增加配置文件zoo.cfg
Ø 启动服务端 bin/zkServer.sh start
Ø 测试,客户端连接: bin/zkCli.sh -server 127.0.0.1:2181
ZooKeeper特点-简单
数据结构:类似Unix文件系统树形结构,每个目录称为Znode节点,但是又不同于文件系统,既可以做目录拥有子节点,又可以做 文件存放数据。
数据模型
层次名称空间
类似unix文件系统,以/为根
区别:节点可以包含与之关联的数据以及子节点名称(即是文件又是文件夹)
节点的路径总是规范,绝对的,斜杠分隔的路径
znode
名称唯一,命名规范。
节点类型:持久,有序,临时,临时顺序。
节点结构构成。
znode—命名规范
节点名称除下列限制外,可以使用任何unicode字符:
Ønull字符(\u0000)不能作为路径名的一部分;
Ø 以下字符不能使用,因为它们不能很好地显示,或者以令人困惑的方式呈现:
\u0001 - \u0019和\u007F - \u009F。
Ø 不允许使用以下字符:\ud800 - uf8fff, \uFFF0 - uFFFF。
Ø“.”字符可以用作另一个名称的一部分,但是“.”和“..”不能单独用于指示路径上的节点,因为ZooKeeper不使用相对路径。下列内 容无效:“/a/b/. / c”或“c / a / b / . . /”。
Ø“zookeeper”是保留节点名。
ZooKeeper特点-简单
操作指令:[zk: localhost:2181(CONNECTED) 1] help
ZooKeeper特点-有序
多种方式跟踪时间
Zxid:
ZooKeeper中的每次更改操作都对应一个唯一的事务id,称为Zxid,它是一个全局有序的戳记,
如果zxid1小于zxid2,则zxid1发生在zxid2之前。
Version numbers
版本号,对节点的每次更改都会导致该节点的版本号之一增加。这三个版本号是dataVersion
(对znode数据的更改次数)、cversion(对znode子节点的更改次数)和aclVersion(对znode ACL的更改次数)。
Ticks
当使用多服务器ZooKeeper时,服务器使用“滴答”来定义事件的时间,如状态上传、会话超时、
对等点之间的连接超时等。滴答时间仅通过最小会话超时(滴答时间的2倍)间接公开;如果客户端请求的会话超时
小于最小会话超时,服务器将告诉客户端会话超时实际上是最小会话超时。
Real Time
ZooKeeper除了在znode创建和修改时将时间戳放入stat结构之外,根本不使用Real time或时钟时间。
ZooKeeper特点-有序
节点上的元数据信息-Stat
除了ephemeralOwner、dataLength、numChildren,其他属性都体现了顺序
ZooKeeper特点-可复制
快速搭建集群
集群特点,保证了服务的可靠性,也解决了单点故障。
ZooKeeper特点-快速
zk快在哪?
zookeeper数据加载在内存中,高吞吐,低延迟。
以读取为主的工作负载,非常快。
操作的znode大小限制1M
性能方面可用于大型的分布式系统。