ZooKeeper 用例
- 使用 ZooKeeper 的应用程序和组织包括(按字母顺序)[1]。
- 如果您的用例想在此处列出。请不要犹豫,提交拉取请求或写电子邮件至dev@zookeeper.apache.org,然后,您的用例将被包含在内。
- 如果本文档侵犯了您的知识产权或您和您公司的隐私,请写邮件至dev@zookeeper.apache.org,我们将及时处理。
自由软件项目
- 在集群支持中使用 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]。
阿帕奇项目
- Accumulo 是一种分布式键/值存储,可提供富有表现力的单元级访问标签。
- Apache ZooKeeper 在 Accumulo 架构中扮演着核心角色。其仲裁一致性模型支持没有单点故障的整体 Accumulo 架构。除此之外,Accumulo 利用 ZooKeeper 来存储和通信用户和表的配置信息,以及进程和平板电脑的操作状态 [2]。
- Atlas 是一组可扩展和可扩展的核心基础治理服务——使企业能够有效且高效地满足其在 Hadoop 中的合规性要求,并允许与整个企业数据生态系统集成。
- Atlas 使用 Zookeeper 进行协调,以提供 HBase、Kafka [31,35] 的冗余和高可用性。
- 针对实时工作负载优化的可扩展、容错和低延迟的存储服务。
- BookKeeper 需要元数据存储服务来存储与账本和可用 bookie 相关的信息。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 维护临时集群成员信息。Drillbits 使用 ZooKeeper 查找集群中的其他 Drillbits,客户端使用 ZooKeeper 查找 Drillbits 以提交查询 [28]。
- Apache Druid 是一个高性能的实时分析数据库。
- Apache Druid 使用 Apache ZooKeeper (ZK) 来管理当前集群状态。在 ZK 上发生的操作是 [27]:
- 协调员领导人选举
- 从历史和实时分段“发布”协议
- 协调器和历史记录之间的分段加载/删除协议
- 霸主选举
- Overlord 和 MiddleManager 任务管理
- Apache Dubbo 是一个高性能、基于 java 的开源 RPC 框架。
- Zookeeper 在 Dubbo [6] 中用于服务注册发现和配置管理。
- Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。Flink 被设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
- 要启用 JobManager 高可用性,您必须将高可用性模式设置为 zookeeper,配置 ZooKeeper 仲裁并设置包含所有 JobManagers 主机及其 Web UI 端口的 masters 文件。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 提供:
- 一种表示持久状态的方法,该状态一直保持到被删除
- 一种表示 TRANSIENT/EPHEMERAL 状态的方法,该状态在创建状态的进程死亡时消失
- 当 PERSISTENT 和 EPHEMERAL 状态发生变化时的通知机制
- Apache Hive 数据仓库软件有助于使用 SQL 读取、写入和管理驻留在分布式存储中的大型数据集。结构可以投影到已经存储的数据上。提供了一个命令行工具和 JDBC 驱动程序来将用户连接到 Hive。
- Hive 一直使用 ZooKeeper 作为分布式锁管理器来支持 HiveServer2 [25,26] 中的并发性。
- Ignite 是一个以内存为中心的分布式数据库、缓存和处理平台,适用于事务、分析和流式工作负载,可提供 PB 级的内存速度
- Apache Ignite 发现机制与 ZooKeeper 实现一起使用,它允许将 Ignite 集群扩展到 100 和 1000 节点,保持线性可扩展性和性能 [31,34]。
- Apache James Mailbox 是一个库,提供灵活的邮箱存储,可通过邮件协议(IMAP4、POP3、SMTP...)和其他协议访问。
- 使用 Zookeeper 和 Curator 框架生成分布式唯一 ID [31]。
- Kafka是一个分布式发布/订阅消息系统
- Apache Kafka 依赖 ZooKeeper 完成以下工作:
- 控制器选举控制器是 Kafka 生态系统中最重要的代理实体之一,它还负责维护跨所有分区的领导-从属关系。如果某个节点由于某种原因正在关闭,则控制器有责任告诉所有副本充当分区领导者,以便在即将失败的节点上履行分区领导者的职责。因此,每当一个节点关闭时,都可以选出一个新的控制器,并且还可以确保在任何给定时间,只有一个控制器,并且所有的跟随节点都同意这一点。
- 主题配置关于所有主题的配置,包括现有主题列表、每个主题的分区数量、所有副本的位置、所有主题的配置覆盖列表以及哪个节点是首选领导者等。
- 访问控制列表所有主题的访问控制列表或 ACL 也在 Zookeeper 中维护。
- 集群Zookeeper 的成员资格还维护了一个在任何给定时刻都在运行并且是集群一部分的所有代理的列表 [9]。
- Apache Kylin 是一个开源分布式分析引擎,旨在在支持超大型数据集的 Hadoop/Spark 上提供 SQL 接口和多维分析 (OLAP),最初由 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 是一个开源分布式发布-订阅消息系统,最初由 Yahoo 创建,现在是 Apache 软件基金会的一部分
- Pulsar 使用 Apache Zookeeper 进行元数据存储、集群配置和协调。在 Pulsar 实例中:
- 配置存储仲裁存储需要全局一致的租户、命名空间和其他实体的配置。
- 每个集群都有自己的本地 ZooKeeper 集合,存储集群特定的配置和协调,例如所有权元数据、代理负载报告、BookKeeper 分类帐元数据等 [24]。
- Solr 是基于 Apache Lucene 构建的流行、速度极快的开源企业搜索平台。
- 在企业搜索引擎 Apache Solr 的“Cloud”版本(v4.x 及更高版本)中,ZooKeeper 用于配置、领导选举等 [12,13]。
- Apache Spark 是用于大规模数据处理的统一分析引擎。
- 利用 ZooKeeper 提供领导选举和一些状态存储,您可以在集群中启动多个连接到同一个 ZooKeeper 实例的 Master。一个人将被选为“领导者”,其他人将保持待机模式。如果当前的leader死掉了,另一个Master会被选举出来,恢复旧Master的状态,然后恢复调度[14]。
- Apache Storm 是一个免费的开源分布式实时计算系统。Apache Storm 可以轻松可靠地处理无限制的数据流,实时处理就像 Hadoop 进行批处理一样。Apache Storm 很简单,可以与任何编程语言一起使用,而且使用起来非常有趣!
- Storm 使用 Zookeeper 来协调集群 [22]。
公司
- AGETO RnD 团队在各种内部和外部咨询项目中使用 ZooKeeper [1]。
- ZooKeeper 用于使用 Solr 和 Hadoop 和 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(其中也包括 ZooKeeper 监控组件!)、Search Analytics 和 Logsene [1]。
- 使用 ZooKeeper 进行领导者选举、配置管理、锁定、组成员身份 [1]。
- ZooKeeper 在 Twitter 被用作存储关键元数据的真实来源。它作为协调内核提供分布式协调服务,例如领导选举和分布式锁定。ZooKeeper 的一些具体示例包括 [15,16]:
- ZooKeeper 用于存储服务注册表,Twitter 的命名服务使用它来进行服务发现。
- Manhattan(Twitter 的内部键值数据库)、Nighthawk(分片 Redis)和 Blobstore(内部照片和视频存储)将其集群拓扑信息存储在 ZooKeeper 中。
- EventBus 是 Twitter 的发布-订阅消息系统,将关键元数据存储在 ZooKeeper 中,并使用 ZooKeeper 进行领导者选举。
- Twitter 的计算平台 Mesos 使用 ZooKeeper 进行领导者选举。
- 在内部用作分片服务的一部分,数据/索引更新的分布式同步,配置管理和故障转移支持 [1]。
- Wealthfront 使用 ZooKeeper 在其众多后端服务中进行服务发现、领导者选举和分布式锁定。ZK 是 Wealthfront 持续部署基础架构的重要组成部分[1]。
- ZooKeeper 用于 Yahoo! 内部的无数服务。用于领导选举、配置管理、分片、锁定、组成员资格等 [1]。
- Zynga 的 ZooKeeper 用于各种服务,包括配置管理、领导者选举、分片等 [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. 和 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] https://spring.io/projects/spring-cloud-zookeeper