0 znode节点类型:
Znode有两种类型,短暂的(ephemeral)和持久的(persistent)
Znode的类型在创建时确定并且之后不能再修改
短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除
Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIAL
1 java代码创建上述4中znonde节点:
//持久的(以下代码只能执行一次) 只能生成节点/pp //zooKeeper.create("/pp", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //zooKeeper.close(); 关闭客户端后 /pp节点依旧在zk内 //持久有序的(在/pp/下面增加一个节点,可以重复执行,父节点必须以/结尾) 这样会在 /pp/0000000000 /pp/0000000001这种方式不断生成子节点 //zooKeeper.create("/pp/", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); //zooKeeper.close(); 关闭客户端后 /pp节点依旧在zk内 查看有多少子节点: zk.getChildren //临时的(临时的下面不能有孩子) zooKeeper.create("/ee", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); //zooKeeper.close(); 关闭客户端后 /ee节点不会在zk内 //临时有序的 for(5) //zooKeeper.create("/pp/", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); thread.sleep(1000); } //zooKeeper.close(); 关闭客户端后 /ee节点和其下面的节点不会在zk内
如下是创建zk各种类型节点代码:
public static void main(String[] args) throws Exception { ZooKeeper zk = new ZooKeeper("hadoop3:2181", 9999, new Watcher() { // 监控所有被触发的事件 public void process(WatchedEvent event) { System.out.println("已经触发了" + event.getType() + "事件!"); } }); // System.out.println(zk); 执行main函数时 请打开 //System.out.println(zk.getChildren("/", false)); //zk.create("/zmtest2", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); /*zk.create("/zmtest3", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); Thread.sleep(10000); // 10S内 创建的临时节点/zmtest3 存在 10S后消失 zk.close();*/ /*zk.create("/zmtest2", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); zk.close(); 执行两次下 会产生如下结果: 直接在根路径下加上流水号产生 [zmtest20000000008, zmtest20000000007, zookeeper] 这两个的值都是15 */ /* 在已经创建好永久节点/zmtest2后,循环执行如下方法2次,然后 ls /zmtest2 看到如下结果[0000000000, 0000000001] 这两个节点值也都是15 * zk.create("/zmtest2/", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); zk.close(); */ //System.out.println(zk.getData("/zmtest",false,null)); // 以字节码打印 }
maven工程见附件
1.1 上面ZooDefs下模式解释:
使用api 中预设的ACL
在创建znode时可以设置该znode的ACL列表。接口org.apache.zookeeper.ZooDefs.Ids中有一些已经设置好的权限常量,例如:
(1)、 OPEN_ACL_UNSAFE :完全开放。 事实上这里是采用了world验证模式,由于每个zk连接都有world验证模式,所以znode在设置了 OPEN_ACL_UNSAFE 时,是对所有的连接开放。
(2)、 CREATOR_ALL_ACL :给创建该znode连接所有权限。 事实上这里是采用了auth验证模式,使用sessionID做验证。所以设置了 CREATOR_ALL_ACL 时,创建该znode的连接可以对该znode做任何修改。
(3)、 READ_ACL_UNSAFE :所有的客户端都可读。 事实上这里是采用了world验证模式,由于每个zk连接都有world验证模式,所以znode在设置了READ_ACL_UNSAFE时,所有的连接都可以读该znode。
2 关于zookeeper 深入学习的连接: 推酷
http://www.tuicool.com/articles/77FJzuj
相关推荐
ZNodes分为临时节点和永久节点,临时节点在创建它的客户端断开连接后自动删除,而永久节点则一直存在,除非被显式删除。 **3. 功能特性** - **命名服务**:Zookeeper可以为分布式服务提供全局唯一的ID,使得分布式...
- **创建 ZNode**:使用 `create()` 方法,指定 ZNode 的路径、数据、权限和类型(临时或持久)。 - **读取 ZNode**:通过 `getData()` 方法获取 ZNode 的数据,同时可以注册监听器来接收数据变更通知。 - **更新...
3. **Zookeeper节点类型**:Zookeeper中的节点分为持久节点(PERSISTENT)和临时节点(EPHEMERAL)。持久节点在创建后会一直存在,直到被显式删除;而临时节点在创建它的会话结束时自动删除。 4. **Watcher机制**:...
5. **ZooKeeper的节点类型**: - ZooKeeper中的每个数据单元被称为一个节点(ZNode),分为持久节点(PERSISTENT)、临时节点(EPHEMERAL)和顺序节点(SEQUENTIAL)。 - 持久节点在创建后会一直存在,除非被显式...
ZooKeeper的java客户端有zk自带的zkclient和Apache开源的Curator。 ZooKeeper提供了文件系统通知机制,Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的...
总之,Apache ZooKeeper的Java API为开发者提供了丰富的操作接口,用于创建、管理、读取和修改Zookeeper中的数据,以及监控节点的变化。正确理解和使用这些API是构建分布式协调服务的关键。在实际应用中,还需要考虑...
3. **建立连接**:Java客户端通过`ZooKeeper`类的构造函数建立到Zookeeper服务器的连接。参数包括服务器地址(多个地址之间用逗号分隔,表示集群)和会话超时时间。例如: ```java zk = new ZooKeeper(address, ...
1. ZNode类型:分为临时节点(ephemeral)和持久节点(persistent)。临时节点在客户端断开连接后自动删除,而持久节点一直存在,直到被显式删除。 2. 数据版本:每个ZNode都有版本号,每次更新数据都会增加版本号,...
Zookeeper的数据结构类似于文件系统,由层次化的znode组成,每个znode都有唯一路径标识,可以存储数据和子节点(EPHEMERAL类型的znode除外)。znode的数据可以有多个版本,客户端可以设置监视器,当节点数据变化时,...
2. `Get`函数获取指定路径的Zookeeper节点数据。 3. `nodeWalk`函数遍历Zookeeper树形结构,将所有节点数据存入一个映射(map)中,类似于Consul中的`Key-Value`存储。 虽然社区中有人尝试了这个方法,但该方案可能...
Zookeeper节点类型** Zookeeper中有四种类型的节点: - **持久节点(Persistent)**:一旦创建,除非主动删除,否则该节点会一直存在。 - **持久顺序节点(Persistent_Sequential)**:同持久节点,但添加一个...
2. EPHEMERAL-临时节点:临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与 Zookeeper 连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。 3. PERSISTENT_SEQUENTIAL-持久...
另一个文件`core_sdk.zip`可能是一个核心SDK,通常包含Zookeeper的Java客户端库和其他语言的SDK,便于开发者在应用程序中与Zookeeper交互。使用这些SDK,你可以方便地读写Zookeeper中的数据,创建和删除节点,以及...
在 Dubbo 中配置 Zookeeper,需要在服务提供者和服务消费者的应用配置文件中指定注册中心类型(`zookeeper`)和地址(`127.0.0.1:2181`)。这样,Dubbo 就能在启动时自动将服务注册到 Zookeeper,并监听其他服务的...
在Java项目中使用Zookeeper,通常需要引入Zookeeper的Java客户端库,通过编写代码调用API与Zookeeper服务器通信。例如,创建一个持久节点的代码示例: ```java ZooKeeper zookeeper = new ZooKeeper("localhost:...
2. **配置环境变量**:打开或创建`~/.bashrc`或`~/.bash_profile`文件(取决于你的Shell类型),添加以下内容来设置Zookeeper的环境变量: ```bash export ZOOKEEPER_HOME=/usr/local/zookeeper-3.7.0 export ...
- **位置**:在每个ZooKeeper节点的`dataDir`目录下创建一个名为`myid`的文件。 - **内容**:在文件中写入一个唯一的数字,该数字与`zoo.cfg`中的`server.id`相对应。 #### 五、启动ZooKeeper集群 1. **启动命令...
Zookeeper中的事件分为三种类型:`CREATE`、`DELETE`、`DATA_CHANGE`,分别对应节点创建、删除和数据变更。此外,还有`CHILD_CHANGE`,用于监听子节点的变化。每个事件都有对应的常量表示,例如`Event.EventType....