Zookeeper的核心概念以及java客户端使用
一、Zookeeper的核心概念
分布式配置中心(存储):disconf(zk)、diamond(mysql+http)
1)znode
ZooKeeper操作和维护的是一个个数据节点,称为 znode,采用类似文件系统的层级树状结构进行管理。如果 znode节点包含数据则存储为字节数组(byte array)。
创建 znode 时需要指定节点类型:znode 共有 4 种类型,分别为:持久(无序)、临时(无序)、持久有序和临时有序。

例子:
[zk: localhost:2181(CONNECTED) 3] create /lin 111
[zk: localhost:2181(CONNECTED) 4] create /lin/jin 222
[zk: localhost:2181(CONNECTED) 8] create /lin/jin2 333
[zk: localhost:2181(CONNECTED) 10] ls /lin
[jin2, jin]
2)节点类型
2大类、四种类型:
持久、临时、持久有序、临时有序:
PERSISTENT:持久类型,如果不手动删除是一直存在的。命令:create
PERSISTENT_SEQUENTIAL:有序,自增。命令:create -s
EPHEMERAL:临时,客户端session失效就会随着删除节点,没有子节点。命令:create -e
EPHEMERAL_SEQUENTIAL:有序,自增
3)Stat数据结构
使用get命令可以获得节点信息:
[zk: localhost:2181(CONNECTED) 22] get /lin
20
cZxid = 0x58
ctime = Sun Feb 16 04:06:47 EST 2020
mZxid = 0x58
mtime = Sun Feb 16 04:06:47 EST 2020
pZxid = 0x5a
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 2
Stat中记录了这个 ZNode 的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)和 cversion(当前ZNode的ACL版本)。
| 状态属性 | 说明 |
|---|---|
| czxid | 节点创建时的zxid |
| mzxid | 节点最新一次更新发生时的zxid |
| ctime | 节点创建时的时间戳. |
| mtime | 节点最新一次更新发生时的时间戳. |
| dataVersion | 节点数据的更新次数. |
| cversion | 其子节点的更新次数 |
| aclVersion | 节点ACL(授权信息)的更新次数. |
| ephemeralOwner | 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点 |
| dataLength | 节点数据的字节数. |
| numChildren | 子节点个数. |
4)Watcher
Watcher(事件监听器):是Zookeeper中的一个很重要的特性。Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到订阅的客户端,该机制是Zookeeper实现分布式协调服务的重要特性。
| KeeperState | EventType | 触发条件 | 说明 | 操作 |
|---|---|---|---|---|
| SyncConnected (3) | None (-1) | 客户端与服务端成功建立连接 | 此时客户端和服务器处于连接状态 | |
| NodeCreated(1) | Watcher监听的对应数据节点被创建 | Create | ||
| NodeDeleted (2) | Watcher监听的对应数据节点被删除 | Delete/znode | ||
| NodeDataChanged (3) | Watcher监听的对应数据节点的数据内容发生变更 | setDate/znode | ||
| NodeChildChanged (4) | Wather监听的对应数据节点的子节点列表发生变更 | Create/child | ||
| Disconnected (0) | None (-1) | 客户端与ZooKeeper服务器断开连接 | 此时客户端和服务器处于断开连接状态 | |
| Expired (-112) | None (-1) | 会话超时 | 此时客户端会话失效,通常同时也会受到SessionExpiredException异常 | |
| AuthFailed (4) | None (-1) | 通常有两种情况,1:使用错误的schema进行权限检查 2:SASL权限检查失败 | 通常同时也会收到AuthFailedException异常 |
列子:
#设置监听
[zk: localhost:2181(CONNECTED) 38] get /lin watcher
#当监听位置发生数据改变
[zk: localhost:2181(CONNECTED) 39] set /lin 4444
#就会收到如下通知
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/lin
5)ZK的ACL
ACL(Access Control List),访问权限控制,管理哪些用户拥有哪些操作权限。
四种类型:
- world:默认方式,相当于全世界都能访问
- auth:代表已经认证通过的用户(可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
- digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
- ip:使用Ip地址认证
ACL支持权限:
CREATE: 能创建子节点
READ:能获取节点数据和列出其子节点
WRITE: 能设置节点数据
DELETE: 能删除子节点
ADMIN: 能设置权限
6)高性能
ZooKeeper 是高性能的。 在“读”多于“写”的应用程序中尤其的高性能,因为“写”会导致所有的服务器间同步状态。(“读”多于“写”是协调服务的典型场景。)
7)顺序访问
对于来自客户端的每个更新请求,ZooKeeper 都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序,应用程序可以使用 ZooKeeper 这个特性来实现更高层次的同步原语。 这个编号也叫做时间戳——zxid(Zookeeper Transaction Id)
二、Zookeeper的Java客户端API
1)原生
在pom文件中加入依赖:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
2)ZkClient
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
3)Curator
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
Zookeeper的核心概念以及java客户端使用的更多相关文章
- ZooKeeper系列(四)—— Java 客户端 Apache Curator
一.基本依赖 Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,目前由 Apache 进行维护.与 Zookeeper 原生客户端相比,Curator 的抽象层次更高,功 ...
- ZooKeeper学习之路(四)—— Java 客户端 Apache Curator
一.基本依赖 Curator是Netflix公司开源的一个Zookeeper客户端,目前由Apache进行维护.与Zookeeper原生客户端相比,Curator的抽象层次更高,功能也更加丰富,是目前 ...
- Apache Zookeeper Java客户端Curator使用及权限模式详解
这篇文章是让大家了解Zookeeper基于Java客户端Curator的基本操作,以及如何使用Zookeeper解决实际问题. Zookeeper基于Java访问 针对zookeeper,比较常用的J ...
- [转载] ZooKeeper的Java客户端API
转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...
- ZooKeeper 系列(一)—— ZooKeeper核心概念详解
一.Zookeeper简介 二.Zookeeper设计目标 三.核心概念 3.1 集群角色 3.2 会话 3.3 数据节点 3.4 节点 ...
- Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)
Elasticsearch之重要核心概念如下: 1.cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是 ...
- ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念
一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...
- ZooKeeper系列(一)—— ZooKeeper 简介及核心概念
一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...
- ZooKeeper入门实战教程(一)-介绍与核心概念
1.ZooKeeper介绍与核心概念1.1 简介ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务.在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道 ...
随机推荐
- Python语言学习:模块
一.模块 1. 模块(Module):以.py结尾的文件,包含python对象定义和python语句.使代码段更容易理解和使用. 模块分为两种:标准库(直接导入的库)和第三方库(需要下载安装的库). ...
- sd卡分区步骤
1.将sd卡通过优盘插在电脑上 2.fdisk /dev/sdb 3. m //帮助 d //删除分区 4. n //添加新的分区. p //默认主分区 回车 +400M ...
- 单调栈and单调队列(此文太多坑了,以后再填)
单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...
- sql的书写顺序
例:select t.* from (select * from t_user where isDelete = 1 limit 0,10) t order by t.qq select from ...
- imx6q-plus-Android6.0下uboot添加网卡驱动
1.文件:iTOP-iMX6_android6.0.1/bootable/bootloader/uboot-imx/include/configs/mx6sabre_common.h修改如下:#def ...
- LeetCode No.121,122,123
No.121 MaxProfit 买卖股票的最佳时机 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你 ...
- day02-文件操作
文件操作. 1,文件路径:d:\python一定要学好.txt 2,编码方式:utf-8 gbk .... 3,操作模式:只读,只写,追加,读写,写读..... 不论哪种方式都只能执行一次.例如r模式 ...
- An internal error occurred during: "Redeploy".
原因:项目中JDK使用的版本与现在使用的JDK版本不同所致. 解决方法:右键选择项目>properties>java Build Path>Libraries 查看下面的JRE Sy ...
- StartDT_AI_Lab | 开启“数据+算法”定义的新世界
继「数据中台技术汇」栏目推出以来,获得了不少技术极客的喜爱.作为AI驱动的数据中台创导者,深度关注核心算法技术的自研创新.融合探索,故推出全新AI算法栏目「StartDT_AI_Lab」,主要介绍算法 ...
- Emgu.CV.CvInvoke的类型初始值设定项引发异常”TypeInitializationException”的问题
问题如图: 解决方案: 1.记住EmguCV的安装位置:X:\XXX\XXX… 本测试方案中EmguCV的安装位置:D:\Emgu,操作时记得用自己的EmguCV安装路径替换掉D:\Emgu. 2.添 ...