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核心理论

相关推荐
JLWcai2025100912 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm
风吹夏回13 天前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
风吹夏回13 天前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby
霸道流氓气质13 天前
分布式追踪与 RequestId 传播完全指南
分布式
cheems952713 天前
[RabbitMQ高级特性] 消息确认机制:从 Ready / Unacked 到 basicAck、basicReject、basicNack 的底层拆解
分布式·rabbitmq·ruby
枫华落尽13 天前
【Hadoop01-完全分布式运行模式】
分布式
隔壁阿布都13 天前
ShedLock 分布式定时任务锁框架介绍
spring boot·分布式
文艺倾年13 天前
【强化学习】数学推导专题,20W字总结(十五)
人工智能·分布式·大模型·强化学习·vibecoding
ACP广源盛1392462567313 天前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark
guslegend13 天前
第1章:初始Kafka
分布式·kafka