ZooKeeper文件系统+监听通知
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 机制:
客户端注册 Watcher,注册 watcher 有 3 种方式,getData、exists、getChildren。
服务器处理 Watcher。
客户端回调 Watcher客户端。
ZooKeeper的监听流程:
首先要有一个main()线程
在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。
通过connect线程将注册的监听事件发送给Zookeeper。
在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
listener线程内部调用了process()方法。