apache-zookeeper - ZooKeeper 快照文件是否足以恢复状态?

标签 apache-zookeeper

我正在学习 ZooKeeper 并研究备份存储在 ZooKeeper 中的数据的选项。 ZooKeeper 写入两个数据文件,快照和事务日志。人们经常提到快照是“模糊的”,需要重放事务日志以获取最新状态。

在 Observers 的情况下,没有事务日志被持久化到磁盘。如果我将观察者(或没有事务日志的领导者/跟随者)写入的快照,并将其放入新的独立 ZooKeeper,ZooKeeper 的状态是否可以保证与快照写入磁盘时的状态相同?

换句话说,要将 ZooKeeper 备份到其当前状态,您需要快照和事务日志。如果我满足于只备份到拍摄快照的时间,那么仅快照就足够了吗?

最佳答案

不可以。快照文件不足以保证返回到以前的状态。事实上,快照文件甚至可能不代表树在任何时间点的状态。

来自 O'Reilly ZooKeeper 的书:

让我们通过一个例子来说明这一点。假设一棵数据树只有两个 znodes:/z 和/z'。最初,/z 和/z' 的数据都是整数 1 现在考虑以下步骤序列:

  • 开始快照。
  • 序列化并将/z = 1 写入快照。
  • 将/z 的数据设置为 2(事务 T)。
  • 将/z' 的数据设置为 2(事务 Tʹ )。
  • 序列化并将/z' = 2 写入快照。

  • 此快照包含/z = 1 和/z' = 2。但是,从来没有一个时间点两个 znode 的值都这样。不过,这不是问题,因为服务器会重放事务。它用快照开始时提交的最后一个事务标记每个快照——称之为 TS。如果服务器最终加载了快照,它会重放 TS 之后的事务日志中的所有事务。在这种情况下,它们是 T 和 Tʹ 。在快照之上重放 T 和 Tʹ 后,服务器获得/z = 2 和/z' = 2,这是一个有效状态。

    您可能会发现使用 ZooKeeper 数据结构模糊快照是可以接受的,但是如果您想保证有效的树,请同时获取快照和事务日志。

    关于apache-zookeeper - ZooKeeper 快照文件是否足以恢复状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28152127/

    相关文章:

    windows - 无法在Windows上启动Zookeeper for kafka

    java - Zookeeper/Chubby -vs- MySql NDB

    java - 在 ZooKeeper 中,有没有办法不用自己实现分布式锁,原子地编写层次结构?

    java - Zookeeper 的真实使用

    java - Spring Cloud 溪流和动物园管理员

    hadoop - 如何将 apache Nutch 2.x 连接到远程 HBase 集群?

    apache-zookeeper - 解释 Apache ZooKeeper

    hadoop - 将数据节点从CDH移动到mapR

    hadoop - hadoop集群中zookeeper的硬件推荐

    apache-kafka - Zookeeper 错误 : dataDir is not set