ZookeePer--两大核心

ZookeePer–两大核心


进入客户端:zkCli.sh

一:文件系统

1)注意:
  • zk的文件系统的结构类似与linux的 /开始

  • zk的文件系统 绝对路径

  • zk中不存在目录的概念也不存在文件的概念,只存在znode的概念 这里的znode既具有文件的功能又具有目录的功能

  • zk中znode的分类(永久无编号节点,永久有编号节点,临时有编号节点,临时无编号节点)

  • 对于zk来说znode存储的大小不要超过1兆 最好不要超过1kb(便于数据同步,速度快减少存储 减少zk每一个节点(机器)的压力)

  • 对于zk来说znode存储的数据的份数 有几个zk节点 存储几份

  • 在zk中可以添加监听的 但是这只能监听znode

2)znode的分类
1.znode节点按照生命周期分类

1)永久结点

creat path data

只要不是人为删除 永久存在

  1. 临时节点

create -e path data

临时存在,临时结点不能有子节点

2.znode节点按照有无编号分

1)有编号节点

create -s path data 创建一个永久且有编号的节点

在创建节点的时候自动分配一个编号,一个节点可以无限创建 这个编号父节点维护的

从0开始顺序递增的,但是在递增的过程中无论父节点的子节点是否位有编号节点都会递增的

2)无编号节点

总分类:有子节点的一定是永久节点

  • 永久无编号节点,create path data

  • 永久有编号节点,create -s path data

  • 临时有编号节点,create -e -s path data

  • 临时无编号节点,create -e path data

3)zookeeper的shell
help:
 stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history 
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create -s path data acl
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port

①查看指定目录下的内容: ls 路径

②查看目录或者指定文件内容: get 路径

③创建结点的命令 creat -s -e 路径 结点的存储内容

④退出客户端 quit

⑤修改znode的内容

set path data

set /bd1906 “hello”

⑤查看状态信息 stat path

cZxid = 0x200000004//

ctime = Tue Oct 08 23:22:26 PDT 2019  //创建时间

mZxid = 0x200000011

mtime = Wed Oct 09 00:07:00 PDT 2019 //修改时间

pZxid = 0x200000004

cversion = 0 //创建版本

dataVersion = 1 //数据版本

aclVersion = 0//权限版本

ephemeralOwner = 0x0 //  0x0   是永久节点

dataLength = 5  存储内容的长度 byte

numChildren = 0 //子节点的个数

全局事件提交的顺序  全局顺序递增的

cZxid = 0x200000004 创建节点的时间id

mZxid = 0x200000011 修改节点的时间id

pZxid = 0x200000004 子节点变化的事件id

zk中各个节点(机器)山哪一个节点zxid最大  越大的代表这个节点上的数据最新

⑥删除节点

delete path 删除没有子节点的节点

rmr path 级联删除

⑦ connect host:port

二:监听机制

在zk中如果某一个客户端对莫一个znode感兴趣,需要添加监听

一旦有客户端感兴趣的事件发生 立即通知客户端

分布式一致性 :通过文件系统+监听机制实现

1)监听的事件类型

nodedatachanged 节点存储的内容是否发生变化

nodedeleted 节点是否删除了

nodecreates 节点是否被创建事件

nodechildrenchanged 节点是否创建了子节点

2)如何添加监听

ls path watch :对子节点感兴趣

get path watch: 对节点内容感兴趣

exists 是否存在

3)触发监听

create

delete

set

注意:监听只生效一次

4)Java API实现的监听器
public class TextWatchAPI {
	static ZooKeeper zk;
	public static void main(String[] args) throws IOException,
	KeeperException, InterruptedException {
		//创建zookeeper连接对象
		zk=new ZooKeeper("hadoop01:2181,hadoop02:2181,hadoop03:2181", 
						6000,new Watcher() {
			//回调方法
			
			@Override
			public void process(WatchedEvent event) {
				//回调函数
				//构建zj对象的时候  测试调用监听器
				EventType type=event.getType();
				String path =event.getPath();
				System.out.println(type+"-----"+path);		
			}
			
		});
			
		//添加监听
		/**
		 * 参数1:路径
		 * 参数2:监听器
		 * 	1)boolean 是否监听监听器
		 * 	   true:添加监听器  默认添加的监听器 zk对象构造的
		 * 		    必须保证zk对象构建的时候 监听器必须是传入的
		 *     false:不添加监听
		 *  2)watch对象
		 */
		//添加监听
		zk.getData("/bd1906", new Watcher() {

			@Override
			public void process(WatchedEvent event) {
				//回调函数
				//构建zj对象的时候  测试调用监听器
				EventType type=event.getType();
				String path =event.getPath();
				System.out.println(type+"####"+path);	
				
				//成功添加上监听
				try {
					zk.getData("/bd1906", true, null);
				} catch (KeeperException | InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}, null);
		//触发监听
		zk.setData("/bd1906", "zookeeper".getBytes(), -1);
		
		//第二次触发监听
		zk.setData("/bd1906", "zookeeper_01".getBytes(), -1);
		
		//第三次
		zk.delete("/test_api", -1);
		
		zk.close();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值