概述
- 是Apache提供的开源的用于进行服务协调和分布式管理的框架
- Zookeeper原来是Hadoop的子件之一,后来发现Zookeeper不止可以用于Hadoop也可以用于其他分布式环境下的管理,独立出来称为一个单独的项目
zookeeper可以解决的分布式问题
- 在分布式环境下,需要确定一个管理节点
- 如果只设置一个管理节点,存在单点故障
- 为了避免管理节点的单点故障,需要设置多个管理节点
- 需要在管理节点集群中来选举出一个主节点
- 要求管理节点集群能够应对崩溃恢复的场景
- 管理节点之间要进行信息的共享
- 确定一套选举算法
特点与节点类型
一、特点
- Zookeeper是一个树状结构(Znode树)
- 树状结构(Znode树)的根节点为 /
- Zookeeper的每一个节点称之为是znode节点
- 所有的znode节点都是从根节点开始计算
- 每一个znode节点都必须存储数据
- 每一个持久的znode节点都可以挂载子节点
- 每一个znode节点的路径都是唯一的。所以基于这一个特点,可以做集群的统一命名服务
- Znode树是维系在内存中的,即每一个znode节点中的数据也是维系在内存中,这样做的目的是方便快速查找
- 不能利用Zookeeper存储海量数据,原因:
- Znode树维系在内存中,并且多个Zookeeper存储的是相同的数据造成内存的浪费;
- Zookeeper是做分布式的协调服务而不是做存储服务
- Zookeeper提供了持久化机制,持久化的目录由zoo.cfg中的dataDir属性来决定
- Zookeeper会为每一次的事务(增加、删除、更新)提供一个全局的递增的事务id
- 任意一个路径是唯一的
二、节点类型
顺序节点 | 非顺序节点 | |
---|---|---|
持久节点 | Persistent_Sequential | Persistent |
临时节点 | ephemeral_Sequential | ephemeral |
节点详解
属性 | 说明 |
---|---|
cZxid | 这个节点创建的时候分配的事务id |
ctime | 这个节点创建的时间 |
mZxid | 这个节点的数据更新分配的事务id |