面试题答案
一键面试工作原理
- Watcher机制:Zookeeper 引入了 Watcher 机制来实现对节点变化的监听。客户端在对 Zookeeper 服务器上的数据节点进行读操作(如
getData
、exists
、getChildren
等)时,可以同时设置一个 Watcher。当被监听的节点发生创建、删除或数据变化时,Zookeeper 服务器会向设置了 Watcher 的客户端发送通知。 - 数据存储与版本:Zookeeper 使用内存数据库来存储数据节点信息。每个数据节点都有一个版本号,每当节点数据发生变化时,版本号会递增。这种版本机制有助于 Zookeeper 检测数据的变更,并且在通知客户端时可以携带版本信息,让客户端知晓数据变化的具体情况。
关键机制
- 客户端与服务器通信:客户端通过 TCP 连接与 Zookeeper 服务器建立通信。当客户端设置 Watcher 时,相关信息会被记录在 Zookeeper 服务器端。一旦节点状态发生变化,服务器会通过这个 TCP 连接向客户端发送 Watcher 事件通知。
- 事件传播:在 Zookeeper 集群中,当一个节点状态发生变化时,这个变化首先会在 Leader 节点上被感知。Leader 节点会通过 ZAB(Zookeeper Atomic Broadcast)协议将这个变化同步到所有的 Follower 节点。一旦所有 Follower 节点都确认接收到变化,相关的 Watcher 通知就会被发送给对应的客户端。
- 一次性触发:Watcher 是一次性触发的。也就是说,当客户端收到一个 Watcher 通知后,如果还想继续监听节点的变化,需要再次设置 Watcher。这一机制避免了重复通知和不必要的资源消耗。