Apache ZooKeeper:写入如何工作

2024-05-17

Apache ZooKeeper 是一种针对小对象的高可用数据存储。 ZooKeeper 集群由一些节点组成,这些节点都将整个数据集保存在内存中。该数据集被称为“始终一致”,因此每个节点每次都有相同的数据。

根据文档和博客文章 http://www.cloudera.com/blog/2009/12/observers-making-zookeeper-scale-even-further/,集群中的每个节点都可以应答读取并接受写入。

  • 读取始终由节点在本地应答,因此不涉及与集群的通信。
  • 写入被转发到指定的“领导者”节点,该节点将写入请求转发到所有节点并等待它们的回复。如果至少一半节点应答,则认为写入成功。

问题:为什么领导者需要等待一半节点回复就足够了?如果有人连接到未收到更新的节点之一,他会得到过时的结果(仅本地读取本地值)。


为了实现高读可用性,Zookeeper保证复制的弱一致性:读总是可以由客户端节点应答,并且返回的答案可能是过时的值(即使已经通过领导者提交了新版本) )。

然后,用户有责任决定读取的答案是否“可陈旧”,因为并非所有应用程序都需要最新信息。因此提供以下选择:

1) 如果您的应用程序不需要读取最新值,您可以通过直接向客户端请求数据来获得高读取可用性。

2) 如果您的应用程序需要读取最新值,则应在读取请求之前使用“sync”API 将客户端版本与领导者同步。

所以总而言之,Zookeeper提供了可定制的一致性保证,用户可以决定可用性和一致性之间的平衡。

如果你想了解更多Zookeeper的内部原理,我推荐这篇论文:ZooKeeper:互联网规模系统的无等待协调 http://www.usenix.org/events/usenix10/tech/full_papers/Hunt.pdf。上述策略在 4.4 节中描述。

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

Apache ZooKeeper:写入如何工作 的相关文章

  • 今天 iCloud + Core Data(2015 年 7 月 10 日)

    几年前 Apple 发布了 Core Data 应用程序的 iCloud 同步 然后我发布了一个适用于 iPad iPhone MAC 的应用程序 其共享模型使用新的 Apple 机制 事情并没有按预期进行 同步机制有时不起作用 例如 就我
  • C#,System.Timers.Timer,每 15 分钟运行一次,与系统时钟同步

    如何让 System Timers Timer 每 15 分钟触发一次与系统时钟同步的事件 换句话说 我希望它恰好在 xx 00 xx 15 xx 30 xx 45 触发 其中 xx 表示任何小时 您可以让它每秒流逝一次 并检查当前时间是否
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 进程间并发文件写入

    我需要将不同进程的日志数据写入单个文件 我正在使用 Windows Mutex 它需要公共语言运行时支持 Mutex m gcnew Mutex false MyMutex m gt WaitOne File Open and Write
  • Hive - 线程安全的自动递增序列号生成

    我遇到一种情况 需要将记录插入到特定的 Hive 表中 其中一列需要是自动递增的序列号 即在任何时间点都必须严格遵循 max value 1 规则 记录从许多并行的 Hive 作业插入到这个特定的表中 这些作业每天 每周 每月批量运行 现在
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 如何使用Python多处理创建同步对象?

    我无法弄清楚如何创建同步的 Python 对象 我有一个名为 Observation 的类和一个名为 Variable 的类 基本上看起来像这样 代码被简化以显示本质 class Observation def init self date
  • HttpSession 内的同步是否可行?

    UPDATE 问题后立即解决 问题 通常 同步是在 JVM 内序列化并行请求 例如 private static final Object LOCK new Object public void doSomething synchroniz
  • 2n + 1 法定人数是什么意思?

    我在描述 HBase 的 Zookeeper 配置时遇到过这个问题 但我对这个术语并不熟悉 N 与我的 HBase 集群中的节点数量有关系吗 或者我应该在 Zookeeper 集群中使用的节点数量 2f 1是指你所需要的可靠性 可用性水平
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • 无法与 ZooKeeper 通信 - 更新被禁用

    我们正面临着 Zoo Keeper 的一个特殊问题 其中 ZK 突然失去了与 solr 云的连接并开始抛出异常 其中显示 无法与 ZooKeeper 对话 更新被禁用 我们的应用程序有 2 个 solr 集群 分别设置在 2 个不同的数据中
  • 未能在kafka-storm中将偏移量数据写入zookeeper

    我正在设置一个风暴集群来计算实时趋势和其他统计数据 但是我在将 恢复 功能引入到这个项目中时遇到了一些问题 方法是允许上次读取的偏移量kafka spout 源代码为kafka spout来自https github com apache
  • Spring @Transactional 并发

    class MyService 公共无效a 同步 某个键 b Transactional 传播 传播 REQUIRES NEW 公共无效b 数据库工作吗 除非您使用代码编织 否则这是行不通的 Spring处理事务的默认方式是通过AOP代理
  • Apache Storm Nimbus 错误:无法找到或加载主类

    我尝试为本地开发 Windows 7 工作站启动 Storm Nimbus 时遇到以下错误 错误 无法找到或加载主类 Files Java jdk1 8 0 92 bin C Program 风暴 yaml storm zookeeper
  • Java 同步计数器 - get() 怎么样?

    众所周知这么简单x 不是原子操作 实际上是读 增量 写操作 这就是为什么它应该同步 但是关于get 我读过它也应该同步 但有人能解释一下为什么吗 通过引入来避免内存一致性错误happens before关系 当出现以下情况时该怎么办get
  • async.js 和系列问题

    连接后尝试运行 fetch 提取比连接更快 并且在控制台中我收到提取错误 因为它返回结果的速度比连接完成的速度快 但在异步系列的文档中 有一个工具可以在第一个返回结果后运行第二个函数 Settimeouts 可以保存情况 但它并不美观 当一
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我

随机推荐

  • Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?

    Ember 发布新版本 3 6 0 后 我开始在控制台中收到错误 rsvp js 24 未捕获 RangeError 超出最大调用堆栈大小 在 WeakMap get 在 getCacheFor metal js 25 在 Computed
  • Inno Setup - 如何在安装过程中读取 INF 文件

    我需要知道如何在安装过程中从 INF 文件 inf 读取值 我希望安装程序检查我要更新的程序的版本 该程序版本不存储在注册表或任何其他文件中 仅存储在 inf 文件中 然后必须从中获取版本 我得到了你的答案 Trama 我无法使用 DLL
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • 无法将小程序(.cap 文件)下载到智能卡中:SW 6D 00(无效指令)

    我正在开发 JCOP3 SecID P60 CS 智能卡 我正在尝试使用下载 cap 文件pyAPDU工具购买 我得到 6D 00回答 无效指令 与 的结果相同gp 请问有人可以告诉我问题出在哪里吗 未给出您用于初始选择颁发者安全域 ISD
  • 如何在html中制作多行类型的文本框?

  • 资产管道:仅对一个控制器使用 javascript 文件

    在 Ruby on Rails v4 中 我希望仅为特定控制器加载一个 js 文件 或一组 js 文件 执行此操作的标准方法是什么 在 application js 中有 require tree 线 我假设这需要删除 所以我并不总是加载每
  • 如何正确更新 Shopware 6 中的插件?

    显然 自动化插件更新存在很大的局限性 Shopware 6 提供了两种自动更新插件的方法 生命周期方法 AND 迁移 不幸的是 这些还不够 这可能是我做错或遗漏的事情 假设我想安装来自第三方的现有插件MyCustomPlugin 该插件当前
  • 带有 RotatingFileHandler 的 Python 3 记录器超出 maxBytes 限制

    我使用以下代码来限制日志文件的大小 最小示例 import logging from logging handlers import RotatingFileHandler Set up logfile and message loggin
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • 当应用程序未运行时,如何在 React Native 应用程序中读取传入的短信?

    有几个可用的 ReactNative 短信插件 但大多数在应用程序位于前台时读取短信 当应用程序甚至没有运行时 我如何读取短信 就像本机短信阅读器应用程序一样 我不知道有任何可用的库 但你可以这样做 创建一个BackgroundScanSe
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • 从 DirectionsRenderer 中获取折线或标记的事件

    我正在使用 DirectionsService 和路线方法来生成 DirectionsResult 我还使用 DirectionsRenderer 对象来显示结果 因为它非常易于使用 我在检测 Directions changed 事件时没
  • 编辑用户个人资料详细信息

    如何创建用于编辑用户自定义信息的操作和视图 授权基于 VS 通过 MVC 4 项目创建的成员资格 我添加了其他列 例如 FirstName 等 我需要并且注册工作正常 但我不知道如何让此属性显示在视图中 Html EditorFor并将更改
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • Django Rest Framework 删除 csrf

    我知道有关于 Django Rest Framework 的答案 但我找不到解决我的问题的方法 我有一个具有身份验证和一些功能的应用程序 我向其中添加了一个新应用程序 它使用 Django Rest Framework 我只想在这个应用程序
  • std::bind 重载解析

    下面的代码工作正常 include
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Apache ZooKeeper:写入如何工作

    Apache ZooKeeper 是一种针对小对象的高可用数据存储 ZooKeeper 集群由一些节点组成 这些节点都将整个数据集保存在内存中 该数据集被称为 始终一致 因此每个节点每次都有相同的数据 根据文档和博客文章 http www