• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

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节点

  1. 客户端发送写请求到leader节点
  2. leader执行写操作并通知follower执行写操作
  3. follower执行完写操作通知leader
  4. leader判断集群中是否超过一半节点都执行了写操作,是则响应客户端请求,否则继续通知下一个follower执行写操作
  5. leader通知剩下的follower执行写操作

写流程之写请求发送给follower节点

  1. 客户端发送写请求到follower节点
  2. follower没有写权限,通知leader执行写操作
  3. leader执行写操作然后通知follower执行写操作
  4. follower执行完写操作通知leader
  5. leader判断集群中是否超过一半节点都执行了写操作,是则通知follower响应客户端请求(客户端请求发送给follower,所以需要follwer响应),否则继续通知下一个follower执行写操作
  6. follower响应客户端请求
  7. leader通知剩下的follower执行写操作
  8. follower执行完写操作通知leader
记得快乐
posted @ 2022-03-29 22:01  Y-wee  阅读(174)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3