ZooKeeper文件系统+监听通知

ZooKeeper简介

ZooKeeper 是一个开源的分布式协调框架,它的定位是为分布式应用提供一致性服务,是整个大数据体系的管理员。ZooKeeper 会封装好复杂易出错的关键服务,将高效、稳定、易用的服务提供给用户使用。
ZooKeeper = 文件系统 + 监听通知机制

1. 文件系统

Zookeeper维护一个类似文件系统的树状数据结构,节点和文件系统目录一样,不过它可以存储数据,每个节点的存放数据上限为1M,
默认有4中类型的节点:

  • PERSISTENT:持久化目录节点,客户端与zookeeper断开连接后,该节点依旧存在。
  • PERSISTENT_SEQUENTIAL:持久化顺序编号目录节点,客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。
  • EPHEMERAL:临时目录节点,客户端与zookeeper断开连接后,该节点被删除。
  • EPHEMERAL_SEQUENTIAL:临时顺序编号目录节点,客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

2. 监听通知机制

可以对节点绑定监听事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 Zookeeper 实现分布式锁、集群管理等功能
ZooKeeper 的 Watcher 机制

  1. 客户端注册 Watcher,注册 watcher 有 3 种方式,getData、exists、getChildren。
  2. 服务器处理 Watcher。
  3. 客户端回调 Watcher客户端。

ZooKeeper的监听流程

  1. 首先要有一个main()线程
  2. 在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。
  3. 通过connect线程将注册的监听事件发送给Zookeeper。
  4. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
  5. Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
  6. listener线程内部调用了process()方法。
posted @ 2021-04-18 19:20  Abserver  阅读(203)  评论(0)    收藏  举报