Zookeeper-入门

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 一,简单操作zk的节点加入如下pom配置: org.apache.zookeeper zookeeper 3.4.6 public class TestZookeeperNode { // 根节点 public static final Strin...


一,简单操作zk的节点


加入如下pom配置:


<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
		</dependency>


public class TestZookeeperNode {

	// 根节点
	public static final String ROOT = "/root-ktv";

	public static void main(String[] args) throws Exception {
		
		Watcher watcher=new  Watcher() {

			// 监控所有被触发的事件
			@Override
			public void process(WatchedEvent event) {
				System.out.println("状态:" + event.getState() + ":"
						+ event.getType() + ":" + event.getWrapper() + ":"
						+ event.getPath());

			}

		};
		// 创建一个与服务器的连接
		ZooKeeper zk = new ZooKeeper("localhost:2181", 30000, watcher);
		
		if(zk.exists(ROOT, watcher)==null){
			//创建一个总的目录ktv,并不控制权限,这里需要持久化节点,不然下面容易出错
			zk.create(ROOT, "root-ktv".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
		}
		
		if(zk.exists(ROOT+"/杭州ktv", watcher)==null){
			//然后杭州开一个ktv, PERSISTENT_SEQUENTIAL 类型会自动加上0000000000 自增的后缀  
			zk.create(ROOT+"/杭州ktv", "杭州ktv".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
		}
		
		if(zk.exists(ROOT+"/北京KTV", watcher)==null){
			//然后北京开一个,EPHEMERAL session过期了就会自动删除
			zk.create(ROOT+"/北京KTV", "北京KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
		}
		
		if(zk.exists(ROOT+"/北京KTV-分店", watcher)==null){
			//北京分店,EPHEMERAL_SEQUENTIA:加上0000000000 自增的后缀 ,session过期了就会自动删除
			zk.create(ROOT+"/北京KTV-分店", "北京KTV-分店".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
		}
		
		//查看节点
		List<String> ktvs=zk.getChildren(ROOT, true);
		System.out.println(Arrays.toString(ktvs.toArray()));
		for(String node:ktvs){
			//删除节点
			zk.delete(ROOT+"/",-1);
			
		}
		//根目录得最后删除的
		zk.delete(ROOT, -1);
		zk.close();
	}

}

嘿嘿,你run一下看看~~


二,zookeeper数据结构







zookeeper数据结构特点:


 1,每个子目录项都被称为znode,这个znode是被它所在的路径唯一标识。

 2,znode可以有子节点目录,并且每个znode可以存储数据。

 3,znode是有版本的,每个znode众存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据;

 4,znode可以是临时结点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除,zookeeper的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳检测来保持连接,这个连接状态被称为session。如果znode是临时结点,这个session失效,znode也就删除了。

 5,znode的目录名可以自动编号

 6,znode可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦编号可以通知设置监控的客户端,这个是zk的核心特性,zk的很多功能都是基于这个特性实现的。


三,zk的常见应用场景


      1,数据的发布与订阅

      2,统一命名服务

      3,分布通知/协调

      4,分布式锁

      5,集群管理

      6,队列管理







相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
4月前
|
存储 消息中间件 负载均衡
Zookeeper基础入门与安装部署
Zookeeper基础入门与安装部署
44 0
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
80 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
71 0
|
2月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
298 0
|
8月前
|
Dubbo Java 应用服务中间件
springboot + dubbo + zookeeper入门到实战超级详解
springboot + dubbo + zookeeper入门到实战超级详解
126 0
|
4月前
|
存储 Shell Linux
ZooKeeper【部署 01】单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置+shell自动部署脚本(一篇入门zookeeper)
ZooKeeper【部署 01】单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置+shell自动部署脚本(一篇入门zookeeper)
97 0
|
4月前
|
Dubbo Java 应用服务中间件
分布式应用简单入门及SpringBoot整合Dubbo+Zookeeper
分布式应用简单入门及SpringBoot整合Dubbo+Zookeeper
45 1
|
9月前
|
存储
zookeeper入门(二)
接触zookeeper也有一段时间了,一直有一个问题困扰着我,那就是zookeeper在codis中扮演什么角色,zookeeper中到底存储了哪些数据。
43 0
|
9月前
|
存储 消息中间件 设计模式
zookeeper入门(一)
Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目
91 0
|
11月前
zookeeper入门到精通08——服务器节点动态上下线案例实战
zookeeper入门到精通08——服务器节点动态上下线案例实战