【Zookeeper-03】zookeeper核心特性介绍

1 监听器

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删除)时,ZooKeeper 会通知客户端。监听机制保证 ZooKeeper 保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。

注意:监听器注册一次,只能监听一次。想再次监听,需要再次注册

1.1 监听操作

  • 监听节点数据的变化:get -w /path
  • 监听子节点增减的变化:ls -w /path

举个例子:
另开一个客户端修改/hello_zk的值,增加子节点触发对应事件
【Zookeeper-03】zookeeper核心特性介绍_第1张图片

1.2 原理介绍

  1. 首先要有一个main()线程
  2. 在main线程中创建Zookeeper客户端,这时就会创建两个线
    程,一个负责网络连接通信(connet. ,一个负责监听(listener. 。
  3. 通过connect线程将注册的监听事件发送给Zookeeper。
  4. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
  5. Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
  6. listener线程内部调用了process()方法。
    【Zookeeper-03】zookeeper核心特性介绍_第2张图片

2 数据写入流程

2.1 写入请求发送到 Follower 节点

  1. 客户端发送写请求到 Follower
    客户端向某个 Follower 节点发送写请求(如 set /path data)。
  2. Follower 转发请求到 Leader
    Follower 节点自身无法处理写请求,会通过内部机制将请求转发给 Leader 节点。
  3. Leader 发起提案(Proposal)
    Leader 生成一个全局唯一的事务 ID(ZXID),并向所有 Follower 节点广播事务提案(Proposal)。
  4. Follower 节点确认提案
    每个 Follower 节点接收到提案后,会记录到本地事务日志,并向 Leader 发送 ACK 确认。
  5. Leader 提交事务(Commit)
    Leader 收到 超过半数节点(即至少 2 个节点,包括 Leader 自身)的 ACK 后,向所有节点发送 Commit 命令,要求提交事务。
  6. Follower 执行写入并响应
    Follower 收到 Commit 后,执行真正的数据写入操作,并向 Leader 发送写入完成的响应。
  7. Leader 返回结果给客户端(由接收到请求的节点响应给客户端处理结果
    Leader 将最终结果返回给最初接收请求的 Follower,Follower 再将结果返回给客户端。

2.2 写入请求直接发送到 Leader 节点

  1. 客户端发送写请求到 Leader
    客户端直接向 Leader 节点发送写请求。
  2. Leader 发起提案(Proposal)
    Leader 生成 ZXID 并向所有 Follower 广播提案。
  3. Follower 节点确认提案
    Follower 记录事务日志并发送 ACK 给 Leader。
  4. Leader 提交事务(Commit)
    Leader 收到超过半数节点的 ACK 后,广播 Commit 命令。
  5. Follower 执行写入并响应
    Follower 执行写入后向 Leader 发送完成响应。
  6. Leader 直接返回结果给客户端(由接收到请求的节点响应给客户端处理结果
    Leader 直接向客户端返回结果。

2.3 核心机制

  1. ZAB 协议
    ZooKeeper 使用 ZAB(ZooKeeper Atomic Broadcast)协议保证数据一致性,通过两阶段提交(Proposal + Commit)确保所有节点最终一致。
  2. 过半确认(Quorum)
    写入成功需要至少 2/3 节点(即 2 个节点)确认,避免单点故障导致数据不一致。
  3. 事务顺序性
    通过 ZXID(单调递增的事务 ID)保证所有节点的事务顺序一致。

你可能感兴趣的:(#,Zookeeper,zookeeper,分布式,云原生)