ZooKeeper 用例
免费软件项目
- 使用 ZooKeeper 在群集支持中实现节点协调。这允许从通过 JMX 连接的任何其他节点管理整个群集或任何特定节点。在 ZooKeeper 协调之上开发的群集范围命令框架允许在某些节点上失败的命令重试等。我们还支持使用同一框架自动优雅地循环重启整个节点群集 [1]。
- Akka 是用于在 JVM 上构建下一代事件驱动的可扩展且容错架构的平台。或者:Akka 是一个工具包和运行时,用于在 JVM 上构建高度并发、分布式且容错的事件驱动应用程序 [1]。
- Eclipse ECF 项目使用 Zookeeper 提供其抽象发现服务的实现。ECF 本身用于许多项目,为通信提供基本功能,所有这些都基于 OSGi [1]。
- Eclipse Gyrex 项目提供了一个平台,用于构建您自己的基于 Java OSGi 的云。
- ZooKeeper 被用作节点成员资格和管理、协调在工作人员之间执行的作业、锁定服务和简单队列服务以及更多内容的核心云组件 [1]。
- 服务部署和编排框架,以前称为 Ensemble [1]。
- Katta 在网格环境中提供分布式 Lucene 索引。
- Zookeeper 用于网格中的节点、主服务器和索引管理 [1]。
- KeptCollections 是 Java Collections 框架中数据结构的替代库。
- KeptCollections 使用 Apache ZooKeeper 作为后备存储,从而使其数据结构分布式且可扩展 [1]。
- Neo4j 是一个图数据库。它是一个基于磁盘、符合 ACID 的事务存储引擎,用于大图和快速图遍历,使用 Lucene/Solr 等外部索引进行全局搜索。
- 我们在 Neo4j 高可用性组件中使用 ZooKeeper 进行写主选举、读从协调和其他很酷的东西。ZooKeeper 是一个伟大而专注的项目 - 我们喜欢! [1]。
- Spring Cloud Zookeeper 通过自动配置和绑定到 Spring Environment 以及其他 Spring 编程模型习语为 Spring Boot 应用程序提供 Apache Zookeeper 集成。通过一些简单的注释,您可以快速启用和配置应用程序中的常见模式,并使用 Zookeeper 构建大型分布式系统。提供的模式包括服务发现和分布式配置 [38]。
- Spring Statemachine 是一个框架,应用程序开发人员可以使用它在 Spring 应用程序中使用状态机概念。
- Spring Statemachine 可以提供此功能:基于 Zookeeper 的分布式状态机 [31,32]。
- Spring XD 是一个统一的、分布式的、可扩展的数据摄取、实时分析、批处理和数据导出系统。该项目的目的是简化大数据应用程序的开发。
- ZooKeeper - 提供 XD 集群的所有运行时信息。跟踪正在运行的容器,其中部署了容器模块和作业、流定义、部署清单等 [30,31]。
- Talend ESB 是一个多功能且灵活的企业服务总线。
- 它使用 ZooKeeper 作为 REST 和 SOAP Web 服务的端点存储库。通过使用 ZooKeeper,Talend ESB 能够以非常轻量级的方式提供故障转移和负载平衡功能 [1]。
- Redis Failover 是一个基于 ZooKeeper 的自动主/从故障转移解决方案,适用于 Ruby [1]。
Apache 项目
- Accumulo 是一个分布式键/值存储,提供表达性的单元级访问标签。
- Apache ZooKeeper 在 Accumulo 架构中扮演着核心角色。它的法定人数一致性模型支持整体 Accumulo 架构,没有单点故障。除此之外,Accumulo 利用 ZooKeeper 存储和通信用户和表的配置信息,以及进程和平板电脑的操作状态 [2]。
- Atlas 是一套可扩展的核心基础治理服务,使企业能够在 Hadoop 中有效且高效地满足其合规性要求,并允许与整个企业数据生态系统集成。
- Atlas 使用 Zookeeper 进行协调,以提供 HBase、Kafka 的冗余和高可用性 [31,35]。
- 为实时工作负载优化的可扩展、容错且低延迟的存储服务。
- BookKeeper 需要一个元数据存储服务来存储与分类帐和可用账簿相关的信息。BookKeeper 目前将 ZooKeeper 用于此和其他任务 [3]。
- Apache CXF 是一个开源服务框架。CXF 帮助您使用前端编程 API(如 JAX-WS 和 JAX-RS)构建和开发服务。这些服务可以处理各种协议,如 SOAP、XML/HTTP、RESTful HTTP 或 CORBA,并可以在各种传输(如 HTTP、JMS 或 JBI)上工作。
- Apache CXF 中的分布式 OSGi 实现使用 ZooKeeper 进行其发现功能 [4]。
- Hadoop、NoSQL 和云存储的无模式 SQL 查询引擎
- ZooKeeper 维护临时群集成员资格信息。Drillbit 使用 ZooKeeper 在群集中查找其他 Drillbit,客户端使用 ZooKeeper 查找 Drillbit 以提交查询 [28]。
- Apache Druid 是一个高性能实时分析数据库。
- Apache Druid 使用 Apache ZooKeeper (ZK) 管理当前群集状态。在 ZK 上发生的运维包括 [27]
- 协调器领导者选举
- 历史和实时中的分段“发布”协议
- 协调器和历史之间的分段加载/删除协议
- 霸主领导者选举
- 霸主和中层管理任务管理
- Apache Dubbo 是一个基于 Java 的高性能开源 RPC 框架。
- Zookeeper 用于 Dubbo 中的服务注册发现和配置管理 [6]。
- Apache Flink 是一个用于对无界和有界数据流进行状态计算的框架和分布式处理引擎。Flink 被设计为在所有常见的群集环境中运行,以内存速度和任何规模执行计算。
- 要启用 JobManager 高可用性,您必须将高可用性模式设置为 zookeeper,配置 ZooKeeper 仲裁组,并使用所有 JobManager 主机及其 Web UI 端口设置一个主文件。Flink 利用 ZooKeeper 在所有正在运行的 JobManager 实例之间进行分布式协调。ZooKeeper 是 Flink 的一项独立服务,它通过领导者选举和轻量级一致状态存储提供高度可靠的分布式协调 [23]。
- Flume 是一项分布式、可靠且可用的服务,用于高效收集、聚合和移动大量日志数据。它具有基于流数据流的简单且灵活的架构。它具有健壮性和容错性,并具有可调节的可靠性机制以及许多故障转移和恢复机制。它使用一个简单的可扩展数据模型,允许进行在线分析应用程序。
- Flume 通过 Zookeeper 支持代理配置。这是一项实验性功能 [5]。
- Apache Fluo 是一个分布式处理系统,允许用户对大型数据集进行增量更新。
- Apache Fluo 构建在 Apache Accumulo 之上,后者使用 Apache Zookeeper 进行共识 [31,37]。
- 适用于批处理和流式处理的大数据质量解决方案。
- Griffin 使用 Zookeeper 进行协调,以提供 Kafka 的冗余和高可用性 [31,36]。
- Apache Hadoop 软件库是一个框架,它允许使用简单的编程模型在计算机集群中对大型数据集进行分布式处理。它旨在从单台服务器扩展到数千台机器,每台机器都提供本地计算和存储。该库本身旨在检测和处理应用程序层面的故障,而不是依赖于硬件来提供高可用性,从而在可能发生故障的计算机集群之上提供高可用性服务。
- 自动 HDFS 故障转移的实现依赖于 ZooKeeper 来处理以下事项
- 故障检测 - 集群中的每台 NameNode 机器都在 ZooKeeper 中维护一个持久会话。如果机器崩溃,ZooKeeper 会话将过期,通知其他 NameNode 应触发故障转移。
- 活动 NameNode 选举 - ZooKeeper 提供了一种简单的机制,可独占地选举一个节点为活动节点。如果当前活动 NameNode 崩溃,另一个节点可能会在 ZooKeeper 中获取一个特殊的独占锁,表明它应该成为下一个活动节点。
- ZKFailoverController (ZKFC) 是一个新组件,它是一个 ZooKeeper 客户端,还负责监视和管理 NameNode 的状态。运行 NameNode 的每台机器还运行一个 ZKFC,该 ZKFC 负责
- 运行状况监视 - ZKFC 定期使用运行状况检查命令 ping 其本地 NameNode。只要 NameNode 及时以运行状况良好状态做出响应,ZKFC 就会认为该节点运行状况良好。如果节点已崩溃、冻结或进入其他不健康状态,运行状况监视器会将其标记为不健康。
- ZooKeeper 会话管理 - 当本地 NameNode 运行状况良好时,ZKFC 会在 ZooKeeper 中保持会话处于打开状态。如果本地 NameNode 处于活动状态,它还将持有特殊的“锁”znode。此锁使用 ZooKeeper 对“临时”节点的支持;如果会话过期,锁节点将自动删除。
- 基于 ZooKeeper 的选举 - 如果本地 NameNode 是正常的,并且 ZKFC 看到当前没有其他节点持有锁 znode,它本身将尝试获取锁。如果成功,则它“赢得了选举”,并负责运行故障转移以使其本地 NameNode 处于活动状态。故障转移过程类似于上面描述的手动故障转移:首先,如果需要,将隔离以前处于活动状态的节点,然后本地 NameNode 转换到活动状态 [7]。
- HBase 是 Hadoop 数据库。它是一个开源、分布式、面向列的存储模型。
- HBase 使用 ZooKeeper 进行主节点选举、服务器租约管理、引导和服务器之间的协调。分布式 Apache HBase 安装依赖于正在运行的 ZooKeeper 集群。所有参与的节点和客户端都需要能够访问正在运行的 ZooKeeper 集群 [8]。
- 如您所见,ZooKeeper 是 HBase 的一个基本部分。所有需要协调的操作(如区域分配、主节点故障转移、复制和快照)都建立在 ZooKeeper 之上 [20]。
- 一个用于分区和复制分布式资源的集群管理框架。
- 我们需要一个分布式存储来维护集群的状态,以及一个通知系统来通知集群状态中的任何更改。Helix 使用 Apache ZooKeeper 来实现此功能 [21]。Zookeeper 提供
- 一种表示持久状态的方法,该状态在被删除之前一直存在
- 一种表示瞬态/临时状态的方法,该状态在创建状态的进程死亡时消失
- 当持久状态和临时状态发生更改时的通知机制
- Apache Hive 数据仓库软件使用 SQL 来简化对存储在分布式存储中的大型数据集的读取、写入和管理。可以将结构投影到已存储的数据上。提供命令行工具和 JDBC 驱动程序以将用户连接到 Hive。
- Hive 一直将 ZooKeeper 用作分布式锁管理器,以支持 HiveServer2 中的并发性 [25,26]。
- Ignite 是一个以内存为中心的分布式数据库、缓存和处理平台,用于事务、分析和流式工作负载,以 PB 级规模提供内存速度
- Apache Ignite 发现机制采用 ZooKeeper 实现,该实现允许将 Ignite 集群扩展到数百个和数千个节点,同时保持线性可扩展性和性能 [31,34]。
- Apache James 邮箱是一个库,它提供了一个灵活的邮箱存储,可通过邮件协议(IMAP4、POP3、SMTP 等)和其他协议进行访问。
- 使用 Zookeeper 和 Curator Framework 来生成分布式唯一 ID [31]。
- Kafka 是一个分布式发布/订阅消息传递系统
- Apache Kafka 依赖 ZooKeeper 来完成以下操作
- 控制器选举控制器是 Kafka 生态系统中最重要的代理实体之一,它还负责维护所有分区中的领导者-跟随者关系。如果某个节点由于某种原因关闭,控制器有责任告诉所有副本充当分区领导者,以履行即将失败节点上的分区领导者的职责。因此,每当一个节点关闭时,都可以选举一个新的控制器,并且还可以确保在任何给定时间,只有一个控制器,并且所有跟随者节点都同意这一点。
- 主题配置有关所有主题的配置,包括现有主题列表、每个主题的分区数、所有副本的位置、所有主题的配置覆盖列表以及哪个节点是首选领导者等。
- 访问控制列表所有主题的访问控制列表或 ACL 也在 Zookeeper 中维护。
- 集群成员资格Zookeeper 还维护一份在任何给定时刻正在运行且属于集群的所有代理列表 [9]。
- Apache Kylin 是一个开源分布式分析引擎,旨在提供 SQL 接口和多维分析 (OLAP),支持 Hadoop/Spark,支持超大型数据集,最初由 eBay Inc. 提供。
- Apache Kylin 利用 Zookeeper 进行作业协调 [31,33]。
- Apache Mesos 将 CPU、内存、存储和其他计算资源从机器(物理或虚拟)中抽象出来,从而可以轻松构建并有效运行容错且弹性的分布式系统。
- Mesos 具有使用多个 Mesos 主控的高可用性模式:一个活动主控(称为领导者或领导主控)和几个备份,以防它发生故障。主控选举领导者,Apache ZooKeeper 既协调选举,又处理主控、代理和调度程序驱动程序的领导者检测 [10]。
- Oozie 是一个工作流调度系统,用于管理 Apache Hadoop 作业。
- Oozie 服务器使用它来协调对数据库的访问并相互通信。为了实现完全 HA,至少应有 3 台 ZooKeeper 服务器 [29]。
- Apache Pulsar 是一个开源分布式发布-订阅消息传递系统,最初由雅虎创建,现在是 Apache 软件基金会的一部分
- Pulsar 使用 Apache Zookeeper 进行元数据存储、集群配置和协调。在 Pulsar 实例中
- 配置存储仲裁存储租户、名称空间和其他需要全局一致的实体的配置。
- 每个集群都有自己的本地 ZooKeeper 集群,用于存储特定于集群的配置和协调,例如所有权元数据、代理负载报告、BookKeeper 分类帐元数据等 [24]。
- Solr 是基于 Apache Lucene 构建的流行、极速、开源企业搜索平台。
- 在企业搜索引擎 Apache Solr 的“云”版本(v4.x 及更高版本)中,ZooKeeper 用于配置、领导者选举等 [12,13]。
- Apache Spark 是一个用于大规模数据处理的统一分析引擎。
- 利用 ZooKeeper 提供领导者选举和一些状态存储,你可以在连接到同一 ZooKeeper 实例的集群中启动多个主节点。一个将被选为“领导者”,而其他将保持待机模式。如果当前领导者死亡,将选举另一个主节点,恢复旧主节点的状态,然后恢复调度 [14]。
- Apache Storm 是一个免费且开源的分布式实时计算系统。Apache Storm 使得可靠地处理无限数据流变得容易,它为实时处理所做的事情,Hadoop 为批处理所做的事情。Apache Storm 简单,可与任何编程语言一起使用,并且使用起来非常有趣!
- Storm 使用 Zookeeper 协调集群 [22]。
公司
- AGETO 研发团队在各种内部和外部咨询项目中使用 ZooKeeper [1]。
- ZooKeeper 用于与 Solr 和 Hadoop with Hbase 的内部应用程序开发 [1]。
- Box 使用 ZooKeeper 进行服务发现、服务协调、Solr 和 Hadoop 支持等 [1]。
- 我们进行研究搜索,并使用先进的搜索技术提供对高质量内容的访问。Zookeeper 用于管理服务器状态、控制索引部署以及其他无数任务 [1]。
- Facebook 使用 Zeus ([17,18]) 进行配置管理,这是 ZooKeeper 的一个分支版本,具有许多可扩展性和性能增强,以便在 Facebook 规模上工作。它在分布于多个区域的服务器之间运行共识协议以实现弹性。如果领导者失败,则追随者将转换为新的领导者。
- Idium Portal 是由挪威公司 Idium AS 提供的托管式网络发布系统。
- ZooKeeper 用于群集消息传递、服务引导和服务协调 [1]。
- 在 VMware 工作站、Amazon EC2、Zen 上的 2 节点群集上使用 ZooKeeper
- 使用 zkpython
- 研究扩展到 100 节点群集 [1]。
- 我们为云计算时代进行虚拟化网络。我们使用 ZooKeeper 处理分布式控制平面的各个方面 [1]。
- Pinterest 使用 ZooKeeper 进行服务发现和动态配置。与许多大型网站一样,Pinterest 的基础设施由服务器组成,这些服务器与由多个单独服务器组成的后端服务通信,以管理负载和容错。理想情况下,我们希望配置仅反映活动主机,这样客户端就不必经常处理不良主机。ZooKeeper 提供了一个众所周知的模式来解决此问题 [19]。
- 电子邮件和应用程序团队使用 ZooKeeper 在分布式电子邮件客户端中协调分片和责任更改,该客户端提取数据并将其编入索引以进行搜索。ZooKeeper 还为连接提供分布式锁定,以防止群集压垮服务器 [1]。
- 在 SPM(也包括 ZooKeeper 监控组件!)、搜索分析和 Logsene 中使用 ZooKeeper [1]。
- 使用 ZooKeeper 进行领导者选举、配置管理、锁定、组成员资格 [1]。
- ZooKeeper 在 Twitter 中用作存储关键元数据的真实来源。它充当协调内核,以提供分布式协调服务,例如领导者选举和分布式锁定。ZooKeeper 在实际应用中的一些具体示例包括 [15,16]
- ZooKeeper 用于存储服务注册表,该注册表由 Twitter 的命名服务用于服务发现。
- Manhattan(Twitter 的内部键值数据库)、Nighthawk(分片 Redis)和 Blobstore(内部照片和视频存储)将其群集拓扑信息存储在 ZooKeeper 中。
- EventBus,Twitter 的发布-订阅消息系统,在 ZooKeeper 中存储关键元数据,并使用 ZooKeeper 进行领导者选举。
- Mesos,Twitter 的计算平台,使用 ZooKeeper 进行领导者选举。
- 作为分片服务的一部分,数据/索引更新的分布式同步,配置管理和故障转移支持 [1]。
- Wealthfront 使用 ZooKeeper 进行服务发现、领导者选举和在其众多后端服务中分布式锁定。ZK 是 Wealthfront 持续 部署基础设施 的重要组成部分 [1]。
- ZooKeeper 用于 Yahoo! 中的众多服务,用于执行领导者选举、配置管理、分片、锁定、组成员身份等 [1]。
- ZooKeeper 在 Zynga 中用于各种服务,包括配置管理、领导者选举、分片等 [1]。
参考
- [1] https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
- [2] https://www.youtube.com/watch?v=Ew53T6h9oRw
- [3] https://bookkeeper.apache.org/docs/4.7.3/getting-started/concepts/#ledgers
- [4] http://cxf.apache.org/dosgi-discovery-demo-page.html
- [5] https://flume.apache.org/FlumeUserGuide.html
- [6] http://dubbo.apache.org/en-us/blog/dubbo-zk.html
- [7] https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
- [8] https://hbase.apache.org/book.html#zookeeper
- [9] https://www.cloudkarafka.com/blog/2018-07-04-cloudkarafka_what_is_zookeeper.html
- [10] http://mesos.apache.org/documentation/latest/high-availability/
- [11] http://incubator.apache.org/projects/s4.html
- [12] https://lucene.apache.org/solr/guide/6_6/using-zookeeper-to-manage-configuration-files.html#UsingZooKeepertoManageConfigurationFiles-StartupBootstrap
- [13] https://lucene.apache.org/solr/guide/6_6/setting-up-an-external-zookeeper-ensemble.html
- [14] https://spark.apache.org/docs/latest/spark-standalone.html#standby-masters-with-zookeeper
- [15] https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/zookeeper-at-twitter.html
- [16] https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/dynamic-configuration-at-twitter.html
- [17] TANG, C., KOOBURAT, T., VENKATACHALAM, P.,CHANDER, A., WEN, Z., NARAYANAN, A., DOWELL,P., AND KARL, R. Facebook 的整体配置管理。在第 25 届操作系统原理研讨会 (SOSP'15) 的论文集(美国加利福尼亚州蒙特雷,2015 年 10 月)中。
- [18] https://www.youtube.com/watch?v=SeZV373gUZc
- [19] https://medium.com/@Pinterest_Engineering/zookeeper-resilience-at-pinterest-adfd8acf2a6b
- [20] https://blog.cloudera.com/what-are-hbase-znodes/
- [21] https://helix.apache.org/Architecture.html
- [22] http://storm.apache.org/releases/current/Setting-up-a-Storm-cluster.html
- [23] https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/jobmanager_high_availability.html
- [24] https://pulsar.apache.org/docs/en/concepts-architecture-overview/#metadata-store
- [25] https://cwiki.apache.org/confluence/display/Hive/Locking
- [26] hive 代码库中的 ZooKeeperHiveLockManager 实现
- [27] https://druid.apache.org/docs/latest/dependencies/zookeeper.html
- [28] https://mapr.com/blog/apache-drill-architecture-ultimate-guide/
- [29] https://oozie.apache.org/docs/4.1.0/AG_Install.html
- [30] https://docs.spring.io/spring-xd/docs/current/reference/html/
- [31] https://cwiki.apache.org/confluence/display/CURATOR/Powered+By
- [32] https://projects.spring.io/spring-statemachine/
- [33] https://www.tigeranalytics.com/blog/apache-kylin-architecture/
- [34] https://apacheignite.readme.io/docs/cluster-discovery
- [35] http://atlas.apache.org/HighAvailability.html
- [36] http://griffin.apache.org/docs/usecases.html
- [37] https://fluo.apache.org/
- [38] http://springjava.cn/projects/spring-cloud-zookeeper