ZooKeeper支持多种类型的数据存储,主要包括以下几种节点类型:
1. **持久节点(PERSISTENT)**:一旦创建,除非手动删除,否则节点会一直存在于ZooKeeper上 。
2. **临时节点(EPHEMERAL)**:生命周期与客户端会话绑定,会话结束时节点被删除。临时节点不能有子节点 。
3. **持久顺序节点(PERSISTENT_SEQUENTIAL)**:具有持久节点的特性,但子节点名会追加一个由父节点维护的自增数字,保证全局唯一 。
4. **临时顺序节点(EPHEMERAL_SEQUENTIAL)**:具有临时节点的特性,子节点名同样追加自增数字 。
ZooKeeper的数据模型是层次化的多叉树形结构,每个节点称为znode,可以存储数据并拥有子节点。Znode的数据可以有多个版本,查询数据时需要带上版本号 。ZooKeeper主要用于协调服务,不适合存储大量业务数据,每个节点的数据大小上限是1MB 。
此外,ZooKeeper的存储分为内存数据存储和磁盘数据存储。内存中的数据会定期Dump到磁盘上形成数据快照(snapshot),同时事务日志也会记录到磁盘上,以保证数据的可靠性和恢复能力 。ZooKeeper的内存数据库管理所有会话、DataTree存储和事务日志,并且会定时向磁盘dump快照数据 。在启动时,Zookeeper通过读取磁盘上的事务日志和快照文件来恢复内存数据库 。