学习
实践
活动
工具
TVP
写文章

zookeeper

简介

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.检测节点是否存在

资料

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180926G1FHDL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码关注腾讯云开发者

领取腾讯云代金券