Zookeeper入门

目录

概念

ZK命令操作

数据模型

服务端命令

bash 复制代码
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh status
./zkServer.sh restart

客户端命令

bash 复制代码
./zkCli.sh -server 127.0.0.1:2181 #登录命令
quit #退出命令
ls / #查看根目录下子节点
ls /dir1/dir2 #查看指定目录下子节点
create /test #创建test节点
get /test #读取节点数据
set /test hehe #设置节点数据
delete /test #删除节点,若包含子节点则无法删除
deleteall /test #删除子树
create -e /test #创建临时节点,当前会话关闭时节点删除
create -s /test #创建顺序节点
create -es /test #创建临时顺序节点
ls -s /test # 可以查看test节点的详细信息

Java API操作

Curator

java 复制代码
//创建基本节点,带有数据,没有数据时则默认客户端ip为数据
client.create().forPath("/app1","hello");
//设置节点类型为临时节点,默认是持久化节点
client.create().withMode(CreateMode.EPHEMEAL).forPath("/path");
//创建多级节点
client.create().creatingParentsIfNeed().forPath("/path");
//查询节点,获取节点数据
client.getData().forPath("/app1");
//查询子节点,获取当前节点的子节点
client.getChildren().forPath("/app1");
//查询节点状态信息
Stat stat = new Stat();
client.getData().storingStatIn(stat).forPath("/app1");
//修改节点数据
client.setData().forPath("/app1","world");
//根据版本信息修改数据法,防止多个客户端同时对数据进行操作,出现并发问题
client.setData().withVersion(stat.getVersion()).forPath("/app2","hahha".getBytes());
//删除带有子节点的节点
client.delete().deletingChildrenIfNeed().forPath("/app3");
//删除必须成功
client.delete().guaranteed().forPath("/app4");
//回调
client.delete().inBackground(()->{}).forPath("/app5");
事件监听

监听特定节点

java 复制代码
//注册NodeCache对象,监听单个节点
final NodeCache nodeCache = new NodeCache(client,"/app1");
//注册监听
nodeCache.getListenable().addListener(()->{
	//获取修改后节点的数据
	byte[] data = nodeCache.getCurrentData().getData();
});
//开启监听
nodeCache.start(true);

监听子节点

java 复制代码
//创建监听对象
PathChildrenCache pathChildrenCache = new PathChildrenCache(client,"/app2",true);
nodeCache.getListenable().addListener(()->{
	//监听子节点的变化,并且拿到变更后的数据
	PathChildrenCacheEvent.Type type = event.getType();
	if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){
		byte[] data = event.getData().getData();
	}
});
pathChildrenCache.start();

监听子树

java 复制代码
TreeCache treeCache = new TreeCache(client,"/app3");
treeCache.getListenable().addListener(()->{
});
treeCache.start();

分布式锁

ZK集群

Leader选举

这里先比较Zxid,再比较Serverid,并且在开始选举时,都会先投票给自己,然后广播投票内容,其他节点收到广播后再根据上述规则确定是否改变投票。

搭建集群

bash 复制代码
1.下载安装包,然后解压,创建data文件夹
2.data文件夹下创建myid文件,并写入id(1,2,3,...)
3.配置zoo.cfg文件,写入集群所有服务器ip:port,格式如下:
server.1 = 127.0.0.1:2181#这里的1是写入myid里的id
...
4.配置zoo.cfg文件,配置dataDir为刚创建的data文件夹
5.启动zk

ZK核心理论

相关推荐
骑着蜗牛撵大象32711 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
德迅云安全-上官12 小时前
德迅游戏盾:面向 TCP 业务的分布式云安全防护方案
分布式·tcp/ip·游戏
麻瓜code14 小时前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
skywalk816314 小时前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式
一条泥憨鱼15 小时前
【RabbitMQ】高级篇
java·分布式·rabbitmq·php·ruby
棣廷16 小时前
初识Spark Core
大数据·分布式·spark
凯凯姜1 天前
分布式锁场景问题
分布式
每天一道题1 天前
CAP、Raft 与多数派:分布式系统如何达成一致?
分布式·后端·微服务
方方洛1 天前
ray教程-18-性能调优与反模式
人工智能·分布式·机器学习
螺蛳粉 螺蛳粉1 天前
CDH第七篇:CDH 集成 Kafka 实战:CSD + Parcel 组合拳,先装 ZooKeeper 是铁律
物联网·zookeeper·kafka·消息队列·parcel·cdh集成·csd