Apache ZooKeeper是一个开源的分布式应用程序协调服务,它允许分布式应用程序在集群中进行协调。它是一个高性能的、可靠的、可扩展的和可管理的服务,可以支持大量的客户端连接。ZooKeeper使用一个文件系统树来存储数据,并使用一个时间戳来标识数据版本。
ZooKeeper是一个分布式协调服务,它允许多台机器之间进行通信,从而实现分布式应用程序的协作。它使用一个文件系统树来存储数据,并使用时间戳来标识数据版本。ZooKeeper具有高性能、可靠性、可扩展性和可管理性,因此在大量客户端连接时性能很好。
ZooKeeper是Apache Hadoop项目中的子项目,也是Hadoop生态系统中重要的部分。它是一个分布式协调服务,允许多台机器之间进行通信,从而实现分布式应用程序的协作。
ZooKeeper不仅在Hadoop生态中得到了广泛应用,而且也在其他大数据生态中得到了广泛使用。例如Apache Storm、Apache Kafka、Apache Cassandra、Apache HBase都使用了ZooKeeper作为其核心部分。此外,ZooKeeper也被广泛应用于企业内部IT部门中(如企业内部集成测试、企业内部监控和企业内部工作流处理)。
ZooKeeper 是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper 成为 Hadoop,HBase 和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase 使用 ZooKeeper 跟踪分布式数据的状态。
在进一步深入之前,我们了解关于分布式应用的一两件事情是很重要的。因此,让我们开始分布式应用的概述的快速讨论。
分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说,对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成。
通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为集群,而在集群中运行的每台机器被称为节点。
分布式应用有两部分, Server(服务器) 和 Client(客户端) 应用程序。服务器应用程序实际上是分布式的,并具有通用接口,以便客户端可以连接到集群中的任何服务器并获得相同的结果。 客户端应用程序是与分布式应用进行交互的工具。
可靠性 - 单个或几个系统的故障不会使整个系统出现故障。
可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。
透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。
竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。
死锁 - 两个或多个操作等待彼此无限期完成。
不一致 - 数据的部分失败。
Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。
ZooKeeper提供的常见服务如下 :
命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
配置管理 - 加入节点的最近的和最新的系统配置信息。
集群管理 - 实时地在集群和节点状态中加入/离开节点。
选举算法 - 选举一个节点作为协调目的的leader。
锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。
分布式应用程序提供了很多好处,但它们也抛出了一些复杂和难以解决的挑战。ZooKeeper框架提供了一个完整的机制来克服所有的挑战。竞争条件和死锁使用故障安全同步方法进行处理。另一个主要缺点是数据的不一致性,ZooKeeper使用原子性解析。
以下是使用ZooKeeper的好处:
简单的分布式协调过程
同步 - 服务器进程之间的相互排斥和协作。此过程有助于Apache HBase进行配置管理。
有序的消息
序列化 - 根据特定规则对数据进行编码。确保应用程序运行一致。这种方法可以在MapReduce中用来协调队列以执行运行的线程。
可靠性
原子性 - 数据转移完全成功或完全失败,但没有事务是部分的。
Impala drop table语句用于删除Impala中的现有表。 此语句还会删除内部表的底层HDFS文件 注意 - 使用此命令时必须小心,因为删除...
Component.DraggedListenerpublic static interface Component.DraggedListener提供当手势识别器将拖动事件分派到组件时要调用的...
Component.KeyEventListenerpublic static interface Component.KeyEventListener提供从组件调度键事件时要调用的回调。该回调将...
ComponentTreeObserver.ScrollChangedListenerpublic static interface ComponentTreeObserver.ScrollChangedListener滚动组件层...
Picker.ElementFormatterpublic static interface Picker.ElementFormatter为 Picker 的每一项格式化左右复合元素对象。需要实现...
AttrHelperjava.lang.Object |---ohos.agp.components.AttrHelperpublic class AttrHelperextends Object将属性值的类型从字符串...
ComponentHolderjava.lang.Object |---ohos.agp.components.ComponentHolderpublic class ComponentHolderextends Object表示 XM...
到目前为止,我们讨论了 Kafka 的核心概念。让我们现在来看一下 Kafka 的工作流程。Kafka 只是分为一个或多个分区的主题的集合。...
GROUP 运算符用于在一个或多个关系中对数据进行分组,它收集具有相同key的数据。语法下面给出了 group 运算符的语法。grunt Grou...