关于Zookeeper 的简单入门说明

Zookeeper版本3.5.6
前言:这篇博客讲的是纯理论和一些简单入门的概念和说明。如果对Zookeeper已经有过了解的可以不用看这篇废话的的博文了

用最简单的说法来描述Zookeeper的话:文件系统(类似)+监控(对于文件系统的增删改查的监控通知)

Zookeeper 概念

Java 编写的高性能分布式协调中间件(主要的功能,开发出来就是为了这么用的,当然也没说不能用于其他的方式,看具体的需求),协调各个服务进程的访问控制问题(类似多线程的同步之类的)。注意注册中心只是Zookeeper本身的特性可以实现的场景需求(注册中心:保留服务和相关访问地址列表)

安装

docker安装Zookeeper 1. 官网下载Zookeeper 解压至特定目录
2. 配置:${zookeeper_home}/conf 下有个配置样例zoo_sample.cfg 改成zoo.cfg(配置里面都有说明)
3. 启动 ${zookeeper_home}/bin/zkServer.sh start (提供服务端口默认2181)
4. 客户端连接 zkCli.sh -server ip:port (-server 如果本地可以不要)

数据结构

基本的数据模型

/
	|------/key1
	|		 	|------/key1_1
	|		 	|------/key1_2
	|------/key2
				|------/key2_1
				|------/key2_2
  1. 树种每个节点叫Znode(支持读写),维护了一个stat 状态信息(数据变化和版本等信息),每个Znode 可以设置一个value值。value 值不应该太大(会带来较大的网络开销),不用将其当成数据库使用
  2. 节点的创建必须按层级创建 比如创建/key1/key1_1 那么/key1 必须存在
节点的类型
  1. 持久化节点:节点数据永久保存到磁盘
  2. 临时节点:生命周期和创建该节点的客户端生命周期一致,客户端会话结束,其创建的节点自动删除
  3. 有序节点:创建的节点后面添加一个递增的序列,该序列在同一父节点下是惟一的,另外持久化节点
    和临时节点是可以有序的
  4. 版本3.5.3之后添加了容器节点:容器节点下的最后一个子节点被删除,该容器节点就会自动删除
  5. 版本3.5.3之后添加了TTL 节点:可以设置节点的存活时间,存活时间内没有修改并且没有任何子节
    点,则自动删除
Watcher机制

提供针对Znode的订阅/通知机制,Znode节点状态发生变化或者Zookeeper客户端连接状态发生变化,触发事件通知(服务发现 /注册依赖此实现),注意Watcher的事件都是一次性的,触发之后还需监听需要重新注册监听