ZooKeeper 快照文件足以恢复状态吗?

2023-12-11

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

对于观察者来说,没有事务日志被保存到磁盘上。如果我要获取观察者(或没有事务日志的领导者/追随者)写入的快照,并将其放入新的独立 ZooKeeper 中,ZooKeeper 的状态是否能保证与快照写入磁盘时的状态相同?

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


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

来自 O'Reilly ZooKeeper 书中:

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZooKeeper 快照文件足以恢复状态吗? 的相关文章

随机推荐

  • Hibernate Envers:跟踪 OneToMany 关系拥有方的修订

    我有两个经过审计的实体 A 和 B 实体 A 拥有实体 B 的集合 注释为一对多关系 将 A 的新实例插入数据库时 A 和 B 的所有行都处于同一修订版 假设为修订版 1 然后 A 上有更新 仅影响实体 B 的实例 级联类型为合并 因此 更
  • 如何使用 Puppeteer 访问 React 事件处理程序

    我不完全确定我明白我的要求 我希望有人能解释一下 我正在尝试在 NodeJS 上使用 Puppeteer 抓取网站 我已经选择了我需要的元素并访问它的属性 但是 我无法访问我需要的属性来提取我想要的信息 我想要的信息在下面的绿色框中 但是我
  • 为什么即使使用前向声明,我也不能在 BEGIN 块中调用稍后定义的 sub?

    这有效 use strict X xxxxxx sub X print shift 这会产生一个错误 use strict BEGIN X xxxxxx sub X print shift Error Undefined subroutin
  • 通过 REST 在超级账本上部署链代码时出现“获取链代码包字节时出错”

    我正在尝试通过 POST REST 在 hyperledger Bluemix 服务 上部署链码 链码 查询规范 jsonrpc 2 0 方法 部署 参数 类型 1 chaincodeID 路径 https github com romeo
  • 翻译微风验证消息

    改进我的示例 了解如何使用获得的元数据在淘汰赛中创建验证规则 http stackoverflow com questions 13662446 knockout validation using breeze utility 现在我使用微
  • 防止 GDB 单步执行函数(或文件)

    我有一些像这样的 C 代码 我正在使用 GDB 逐步执行 void foo int num void main Baz baz foo baz get 当我在main 我想步入foo 但我想跨过去baz get The GDB docs说
  • 如何推送(即刷新)发送到 TCP 流的数据

    RFC 793说TCP定义了一个 推送 函数来确保接收者收到数据 有时用户需要确保他们拥有的所有数据 提交给TCP已经传输了 为此目的一推 函数已定义 确保提交给 TCP 的数据是 实际传输的发送用户表明它应该是 推送给接收用户 推送会导致
  • 报亭应用程序需要推送通知吗?

    如果我提交一个不使用推送通知的报刊亭应用程序 而是在每次用户启动该应用程序时向我的服务器查询新内容 苹果会拒绝我的应用程序吗 IE 用户是否期望在所有报亭应用上推送 Thanks 不 Apple 的指南并不强制要求使用推送通知 并且您的应用
  • 在服务内调用 getSystemService

    我正在尝试编写一项在 Gear Live 上获取心率的服务 遵循此处的问题从 传感器 Samsung Gear Live 获取心率 如果我把这部分 Log d TAG prepare to call getSystemService mSe
  • 使用 Nodejs 和 pug 进行客户端模板化

    我正在构建一个网络应用程序 它在客户端构建了动态小部件 目前我使用nodejs和pug作为我的服务器端模板库 我喜欢pug的简单性 我希望在服务器上有一系列小的 pug 文件 客户端可以将其用作构建块来构造用户所需的小部件 我尝试使用此处找
  • 单击:如何将操作应用于所有命令和子命令,但允许命令选择退出?

    我有一个案例 我想自动运行一个常用函数 check upgrade 对于我的大多数单击命令和子命令 但在少数情况下我不想运行它 我想我可以有一个可以添加的装饰器 例如 bypass upgrade check 对于命令 其中check up
  • MongoDB 将字符串类型转换为浮点类型

    按照这里的建议MongoDB 如何更改字段的类型 我尝试更新我的集合以更改字段的类型及其值 这是更新查询 db MyCollection find ProjectID 44 Cost exists true forEach function
  • tf.constant 和 tf.placeholder 的行为不同

    我想将 tf metrics 包装在 Sonnet 模块中以测量每个批次的性能 以下是我所做的工作 import tensorflow as tf import sonnet as snt class Metrics snt Abstrac
  • 合并从旧提交创建的分支到master

    我从旧的主提交创建了一个新分支 当尝试使用将其与 master 合并时 git checkout master git merge newbranch 我正进入 状态 Already up to date 尽管它是不同的代码 当然 可以选择
  • KeyCloak 忘记密码 电子邮件链接

    我们正在使用 keycloak 实现身份验证 特别针对忘记密码选项 当用户单击 忘记密码 选项并提供用户名时 系统将向其 ID 发送一封电子邮件 其中包含重置密码的链接 我的问题具体在链接上 通过电子邮件发送的链接如下所示 https au
  • 如何使用 JavaScript 和 FastAPI 上传多个文件?

    我遵循 FastAPI 文档 我试图将用 js 编写的客户端文件发送到用 FastAPI 编写的服务器 My HTML
  • 使用 Spring LDAP Repository 的多个 LDAP 存储库

    我想使用 Spring LDAP 设置多个 LDAP 存储库 我的目标是同时创建或更新所有存储库中的对象 我使用 LdapRepository Spring 接口 我认为目前这是不可能的 我想知道我是否可以创建自己的 LdapReposit
  • 你在 Java 中推荐哪些 HTML 解析库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我想解析一些 HTML 以
  • 本地主机、Php artisan 服务和 homestead 的优点/缺点

    我是 Laravel 的新手 我很困惑将使用哪个环境来创建带有数据库集成 MYSQL 的应用程序 Wamp 本地主机 PHP工匠 家园 每种环境的优点 缺点是什么 谢谢 虽然这个问题是基于意见的 但我的回答将基于我的经验 WAMP 本地主机
  • ZooKeeper 快照文件足以恢复状态吗?

    我正在了解 ZooKeeper 并查看备份 ZooKeeper 中存储的数据的选项 ZooKeeper写入两个数据文件 快照和事务日志 人们经常提到快照是 模糊的 需要在它们上重放事务日志以获得最新状态 对于观察者来说 没有事务日志被保存到