ZooKeeper 持久化机制

Posted 郭朝阳@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper 持久化机制相关的知识,希望对你有一定的参考价值。

ZooKeeper 持久化机制

概述

ZooKeeper 的数据模型主要涉及两类知识:数据模型 和 持久化机制,其实就是两套 API

  • 1、数据模型:DataTree + DataNode
  • 2、持久化机制:FileTxnSnalLog = TxnLog + SnapLog
  • 3、zk数据库:ZKDataBase = DataTree + FileTxnSnalLog

在 ZKDataBase 对象的内部有两个成员变量:DataTree + FileTxnSnalLog

ZooKeeper 本身是一个对等架构(内部选举,从所有 Learner 中选举一个 Leader, 剩下的成为 Follower)

  • 1、每个节点上都保存了整个系统的所有数据(leader存储了数据,所有的follower节点都是leader的副本节点)
  • 2、每个节点上的都把数据放在磁盘一份,放在内存一份

ZooKeeper 的数据模型,抽象出了重要的三个 API 用来完成数据的管理:

  • 1、DataNode znode 系统中的一个节点的抽象
  • 2、DataTree znode 系统的完整抽象
  • 3、ZKDataBase 负责管理 DataTree,处理最基本的增删改查的动作,执行 DataTree 的相关快照和恢复的操作
    在这里插入图片描述

关于 ZooKeeper 中的数据在内存中的组织,其实就是一棵树:

  • 1、这棵树就叫做:DataTree (抽象了一棵树)
  • 2、这棵树上的节点:DataNode (抽象一个节点)
  • 3、关于管理这个 DataTree 的组件就是 ZKDataBase (内存数据库:针对 DataTree 能做各种操作)

ZooKeeper 的持久化的一些操作接口,都在:org.apache.zookeeper.server.persistence 包中。

在这里插入图片描述
SnapShot是针对快照的顶级封装;
TxnLog 是针对日志操作的顶级封装;
FileSnap和FileTxnLog是针对这两个封装的实现。

FileTxnSnapLog这个是针对这两个操作的封装,保证了数据的持久化和一致性(内存和磁盘快照数据的一致性)
在这里插入图片描述

主要的类总结:

  • 第一组:主要是用来操作日志的(如果客户端往 ZooKeeper 中写入一条数据,则记录一条日志)
    TxnLog,接口,读取事务性日志的接口
    FileTxnLog,实现 TxnLog 接口,添加了访问该事务性日志的 API
  • 第二组:拍摄快照(当内存数据持久化到磁盘)
    Snapshot,接口类型,持久层快照接口
    FileSnap,实现 Snapshot 接口,负责存储、序列化、反序列化、访问快照
  • 第三组;两个成员变量:TxnLog 和 SnapShot
    FileTxnSnapLog,封装了 TxnLog 和 SnapShot
  • 第四组:工具类
    Util,工具类,提供持久化所需的API

以上是关于ZooKeeper 持久化机制的主要内容,如果未能解决你的问题,请参考以下文章

Zookeeper源码分析之Watcher机制

Zookeeper节点知识点整理

zookeeper核心面试整理(继续更新)

Spark系列Master主备切换机制

分布式锁框架分析

zk小结