简介
zk为分布式应用提供了高效且可靠的分布式协调服务。用于解决数据同步、数据发布/订阅、集群管理、配置管理、分布式锁、命名服务、负载均衡等问题。最早由雅虎创建,具有以下特性:
顺序一致性
包括全局有序和偏序两种:全局有序是指如果再一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
原子性
更新只能成功或者失败,没有其他中间信息
单一视图
不管连接到zk集群的哪台机器,客户端看到的视图都是一致的
可靠性
消息message被到一台服务器接受,那么它到任何服务器都被接受。
实时性
zk保证在一个时间间隔范围内获得服务器的更新信息,或者服务器失效信息。但是由于网络延时等一些其他原因,zk不能保证两个客户端同事得到更新或者失效信息。
强一致性
分布式高并发情况下创建节点一定是全局唯一性,zk会保证客户端无法重复创建一个已经存在的数据节点。
zk采用树型结构的名字空间,类似于一个文件系统的目录结构,全量数据存储在内存中。当节点发生变化时(创建、删除、数据变更),可以通知各个客户端。
zk的数据节点有两种:持久性节点、临时节点。对于临时节点,一旦创建znode的客户端与服务器失去联系,这个znode就会自动删除,ZooKeeper的客户端与服务器通信采用长连接的方式(这种连接状态称为session),如果znode是临时节点,这个session失效,znode也就被删除了。
zk以集群形式对外提供服务,集群只要有一半的机器能正常工作,就可以正常运转。默认端口号2181。
zk支持单机、集群两种模式。
常用于一些大型的分布式系统的应用,比如:Hadoop、Kafka、Hbase、dubbo
常用命令:
创建节点(create)
读取(get)
更新节点的数据内容(set)
删除(delete)
开源的客户端:
ZkClient
Curator
ZkClient 介绍
ZkClient是github上一个开源的ZK客户端,在zookeeper原生API接口之上进行了包装,是一个更易用的ZK客户端。实现了如session超时重连、Watcher反复注册等功能,使得zookeeper客户端的繁琐细节工作对开发人员透明。
pom依赖
代码示例:
1.建立客户端连接
ZkClient 构造方法参数说明:
2.创建节点
3.删除节点
4.读取数据
getChildren
subscribeChildChanges
与原生的Watcher不同的是,zkclient的Listener不是一次性的,客户端只需要注册一次就会一直生效。
readData
获取指定节点的数据内容。
subscribeDataChanges
“节点内容变更”和“节点删除”事件监听。
5.更新数据
6.检测节点是否存在
资料
▼
领取专属 10元无门槛券
私享最新 技术干货