一、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客户端使用的更多相关文章

  1. ZooKeeper系列(四)—— Java 客户端 Apache Curator

    一.基本依赖 Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,目前由 Apache 进行维护.与 Zookeeper 原生客户端相比,Curator 的抽象层次更高,功 ...

  2. ZooKeeper学习之路(四)—— Java 客户端 Apache Curator

    一.基本依赖 Curator是Netflix公司开源的一个Zookeeper客户端,目前由Apache进行维护.与Zookeeper原生客户端相比,Curator的抽象层次更高,功能也更加丰富,是目前 ...

  3. Apache Zookeeper Java客户端Curator使用及权限模式详解

    这篇文章是让大家了解Zookeeper基于Java客户端Curator的基本操作,以及如何使用Zookeeper解决实际问题. Zookeeper基于Java访问 针对zookeeper,比较常用的J ...

  4. [转载] ZooKeeper的Java客户端API

    转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...

  5. ZooKeeper 系列(一)—— ZooKeeper核心概念详解

    一.Zookeeper简介 二.Zookeeper设计目标 三.核心概念         3.1 集群角色         3.2 会话         3.3 数据节点         3.4 节点 ...

  6. Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)

    Elasticsearch之重要核心概念如下: 1.cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是 ...

  7. ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念

    一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...

  8. ZooKeeper系列(一)—— ZooKeeper 简介及核心概念

    一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...

  9. ZooKeeper入门实战教程(一)-介绍与核心概念

    1.ZooKeeper介绍与核心概念1.1 简介ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务.在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道 ...

随机推荐

  1. Oscar的数理统计笔记本

    目录 Random Variable discrete distribution: continuous distribution: 统计量 现代统计学时期: Survey sampling Rand ...

  2. vue-router query和params参数的区别

    1.query方式传参和接收参数(相当于get请求) this.$router.push({ path:'/home' query:{ id:1 } }) 接收参数: this.$route.quer ...

  3. [LC] 271. Encode and Decode Strings

    Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...

  4. 共克时艰,停工不停学 Serverless 在线课堂免费开课

    二月份,Serverless 团队联合腾讯云大学与云+社区免费推出 Serverless 在线直播课程,课程涵盖 Serverless 架构解密.技术解析以及不同应用场景下的最佳实战指导,让你从 0 ...

  5. 用logstash 作数据的聚合统计

    用logstash 作数据的聚合统计 以spark-streaming 处理消费数据,统计日志经spark sql存储在mysql中 日志写入方式为append val wordsDataFrame ...

  6. iOS 后台任务

    首先开启后台任务 使用设置后台任务触发的时机 application.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIn ...

  7. Arcpy处理修改shapefile FeatureClass 线要素坐标

    需求:在开发的webgis系统中需要将道路矢量数据与谷歌地图瓦片叠加,谷歌地图瓦片在国家测绘局的要求是进行了偏移处理的,人称“火星坐标系GCJ_02”,道路数据是WGS-84坐标系下的经纬度坐标,现在 ...

  8. iOS燃烧动画、3D视图框架、天气动画、立体相册、微信朋友圈小视频等源码

    iOS精选源码 iOS天气动画,包括太阳,云,雨,雷暴,雪动画. 较为美观的多级展开列表 3D立体相册,可以旋转的立方体 一个仪表盘Demo YGDashboardView 一个基于UIScrollV ...

  9. deeplearning.ai 卷积神经网络 Week 1 卷积神经网络

    1. 传统的边缘检测(比如Sobel)手工设计了3*3的filter(或者叫kernel)的9个权重,在深度学习中,这9个权重都是学习出来的参数,会比手工设计的filter更好,不但可以提取90度.0 ...

  10. left join on和where 限制查询的区别在于

    left join on: 会显示前表的所有数据,不满足显示为null或者为0 . 而where显示的为满足条件的记录,不满足但是存在的数据不显示. 做统计数据的时候,用join on比较合理.