网站以前在百度能搜索不到,营销渠道方案,如何购买云服务器,企业网站优化问题节点类型
持久节点#xff08;Persistent Nodes#xff09;
这些是Zookeeper中最常见的一种节点类型#xff0c;当创建一个持久类型节点时#xff0c;该值会一直存在zookeeper中#xff0c;直到被显式删除或被新值覆盖。
临时节点#xff08;Ephemeral Nodes#xff…节点类型
持久节点Persistent Nodes
这些是Zookeeper中最常见的一种节点类型当创建一个持久类型节点时该值会一直存在zookeeper中直到被显式删除或被新值覆盖。
临时节点Ephemeral Nodes
这些节点只在创建它们的会话有效期内存在。如果会话过期或断开连接节点会自动删除。临时节点通常用于表示分布式系统中的客户端或工作节点例如队列或锁。
持久顺序节点PERSISTENT_SEQUENTIAL Nodes
顺序节点与持久节点类似但其名称后面附加了一个序号使得节点名称唯一。当创建顺序节点时Zookeeper会给其名称添加一个单调递增的计数器
临时顺序节点EPHEMERAL_SEQUENTIAL Nodes
同持久顺序节点特性只不过会话内有效。会话关闭会自动消失。
3.6之后的版本还增加了ttl节点和Container节点。
创建不同类型节点
使用cli.sh
create命令默认创建的时持久节点
#创建持久顺序节点
create -s /persistent_seq_node
#创建临时节点
create -e /ephemeral_node
#创建临时顺序节点
create -s -e /ephemeral_seq_node顺序节点自动会加后缀
[zk: localhost:2181(CONNECTED) 14] create -s /persistent_seq_node
Created /persistent_seq_node0000000001
[zk: localhost:2181(CONNECTED) 15] create -s /persistent_seq_node
Created /persistent_seq_node0000000002临时顺序节点也会自动加后置
[zk: localhost:2181(CONNECTED) 24] create -s -e /ephemeral_seq_node
Created /ephemeral_seq_node0000000004
[zk: localhost:2181(CONNECTED) 25] create -s -e /ephemeral_seq_node
Created /ephemeral_seq_node0000000005临时节点会话关闭后会自动消失。这个端口zkCli.sh从写开启一个连接测试下即可。
使用java创建不同类型节点
zookeeper的api将抽象出一个CreateMode枚举对象来表示不同的节点类型。
使用原生api。最后一个参数指定类型
zooKeeper.create(path,123.getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT)zkclient使用不同的create重载方法来创建 Curator在创建时候使用withMode来指定节点类型
client.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(/sequential_node_, data);顺序节点的获取
一般顺序节点都会有一层父节点然后通过调用父节点的所有子节点来获取所有的顺序节点。
如使用curator获取
ListString strings client.getChildren().forPath(/test);节点状态信息
节点的状态信息被封装在Stat对象中。Stat有以下属性
public class Stat implements Record {//节点的创建事务的zxidZooKeeper Transaction Id即创建时事务的IDprivate long czxid;//节点最后一次修改事务的zxid即最后一次更新或者删除发生时的事务IDprivate long mzxid;//创建时间private long ctime;//上次修改时间private long mtime;//版本号数据被修改次数private int version;//节点子节点的版本号即子节点被修改的次数private int cversion;//节点ACL访问控制列表的版本号即ACL被修改的次数private int aversion;//如果当前节点是临时节点则ephemeralOwner表示当前节点的拥有者会话ID否则值为0private long ephemeralOwner;//数据长度private int dataLength;//子节点数private int numChildren;//子节点上次修改事务IDprivate long pzxid;}可以通过exists方法来获取stat对象
Stat stat zooKeeper.exists(path, false);