LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code and KPI, Keep progress,make a better result.
Survive during the day and develop at night。
目录
概 述
Zookeeper核心概念
分布式配置中心(存储):disconf(zk) diamond(mysql+http)
什么是znode
ZooKeeper操作和维护的为一个个数据节点,称为 znode,采用类似文件系统的层级树状结构进行管理。如果 znode 节点包含数据则存储为字节数组(byte array)。
创建 znode 时需要指定节点类型
znode 共有 4 种类型,分别为:持久(无序)、临时(无序)、持久有序和临时有序。
节点类型
2大类、四种类型 持久、临时、持久有序、临时有序
PERSISTENT 持久类型,如果不手动删除 是一直存在的
PERSISTENT_SEQUENTIAL
EPHEMERAL 临时 客户端session失效就会随着删除节点 没有子节点
EPHEMERAL_SEQUENTIAL 有序 自增
stat数据结构
stat中记录了ZNode的三个数据版本,分别是version(当前ZNode的版本), cversion(当前ZNode子节点版本)和 cversion(当前ZNode的ACL版本)。
Stat:状态信息、版本、权限相关
czxid 节点创建时的zxid
mzxid 节点最新一次更新发生时的zxid
ctime 节点创建时的时间戳.
mtime 节点最新一次更新发生时的时间戳.
dataVersion 节点数据的更新次数.
cversion 其子节点的更新次数
aclVersion 节点ACL(授权信息)的更新次数.
ephemeralOwner 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点
dataLength 节点数据的字节数.
numChildren 子节点个数.
Session会话:
客户端来创建一个和zk服务端连接的句柄。
连接状态:CONNECTING\CONNECTED\CLOSED
什么是watcher
Watcher(事件监听器),是Zookeeper中的一个很重要的特性。Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端上去,该机制是Zookeeper实现分布式协调服务的重要特性。
什么是ACL
内置的 ACL schemes:
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证
ACL支持权限:
CREATE: 能创建子节点
READ:能获取节点数据和列出其子节点
WRITE: 能设置节点数据
DELETE: 能删除子节点
ADMIN: 能设置权限
public ZkClient(String serverstring)
public ZkClient(String zkServers, int connectionTimeout)
public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout)
public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout, ZkSerializer zkSerializer)
public ZkClient(final String zkServers, final int sessionTimeout, final int connectionTimeout, final ZkSerializer zkSerializer, final long operationRetryTimeout)
public ZkClient(IZkConnection connection)
public ZkClient(IZkConnection connection, int connectionTimeout)
public ZkClient(IZkConnection zkConnection, int connectionTimeout, ZkSerializer zkSerializer)
public ZkClient(final IZkConnection zkConnection, final int connectionTimeout, final ZkSerializer zkSerializer, final long operationRetryTimeout)
创建节点
public void createPersistent(String path)
public void createPersistent(String path, boolean createParents)
public void createPersistent(String path, boolean createParents, List acl)
public void createPersistent(String path, Object data)
public void createPersistent(String path, Object data, List acl)
public String createPersistentSequential(String path, Object data)
public String createPersistentSequential(String path, Object data, List acl)
public void createEphemeral(final String path)
public void createEphemeral(final String path, final List acl)
public String create(final String path, Object data, final CreateMode mode)
public String create(final String path, Object data, final List acl, final CreateMode mode)
public void createEphemeral(final String path, final Object data)
public void createEphemeral(final String path, final Object data, final List acl)
public String createEphemeralSequential(final String path, final Object data)
public String createEphemeralSequential(final String path, final Object data, final List acl)
删除节点:
public boolean delete(final String path)
public boolean delete(final String path, final int version)
public boolean deleteRecursive(String path)
读取列表:
public List getChildren(String path)
获取节点内容
public <T extends Object> T readData(String path)
public <T extends Object> T readData(String path, boolean returnNullIfPathNotExists)
public <T extends Object> T readData(String path, Stat stat)
注册监听:
IZkChildListener,ZkClient的subscribeChildChanges方法 ,ZkClient的unsubscribeChildChanges方法
IZkDataListener,ZkClient的subscribeDataChanges方法 ,ZkClient的subscribeChildChanges方法
在这里插入代码片
接口类 注册监听方法 解除监听方法
IZkChildListener ZkClient的subscribeChildChanges方法 ZkClient的unsubscribeChildChanges方法
IZkDataListener ZkClient的subscribeDataChanges方法 ZkClient的subscribeChildChanges方法
IZkStateListener ZkClient的subscribeStateChanges方法 ZkClient的unsubscribeStateChanges方法
小结
参考资料和推荐阅读
1.链接: 参考资料.