zookeeper监听器及写数据流程
zookeeper监听器及写数据流程
zookeeper监听器原理
- 首先要有一个main()线程
- 在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)
- 通过connect线程将注册的监听事件发送给Zookeeper
- 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
- Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
- listener线程内部调用了process()方法
监听节点值变化
# 监听/zookeeper节点值
[zk: localhost:2181(CONNECTED) 4] get -w /zookeeper
v1
# 修改/zookeeper节点值
[zk: localhost:2181(CONNECTED) 5] set /zookeeper "v"
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/zookeeper
可以看到修改/zookeeper节点值后监听器生效了
注意:再次修改/zookeeper的值监听器不会生效,因为监听器注册一次,只能监听一次,想再次监听,需要再次注册
监听节点变化
这里的节点变化指的是节点结构,例如:节点增加或减少了子节点
# 监听/znode1节点
[zk: localhost:2181(CONNECTED) 12] ls -w /znode1
[znode1.1]
# 删除/znode1/znode1.1节点
[zk: localhost:2181(CONNECTED) 13] delete /znode1/znode1.1
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/znode1
可以看到删除/znode1/znode1.1节点后监听器生效了
zookeeper写流程之写请求直接发送给Leader节点
- 客户端发送写请求到leader节点
- leader执行写操作并通知follower执行写操作
- follower执行完写操作通知leader
- leader判断集群中是否超过一半节点都执行了写操作,是则响应客户端请求,否则继续通知下一个follower执行写操作
- leader通知剩下的follower执行写操作
写流程之写请求发送给follower节点
- 客户端发送写请求到follower节点
- follower没有写权限,通知leader执行写操作
- leader执行写操作然后通知follower执行写操作
- follower执行完写操作通知leader
- leader判断集群中是否超过一半节点都执行了写操作,是则通知follower响应客户端请求(客户端请求发送给follower,所以需要follwer响应),否则继续通知下一个follower执行写操作
- follower响应客户端请求
- leader通知剩下的follower执行写操作
- follower执行完写操作通知leader
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!