大象教程
首页
Spark
Hadoop
HDFS
MapReduce
Hive
Zookeeper 教程
ZooKeeper 教程
ZooKeeper 基础知识
ZooKeeper 工作流程
ZooKeeper Leader 节点选举
ZooKeeper 安装
ZooKeeper CLI
ZooKeeper API
ZooKeeper 应用
#ZooKeeper 基础知识 在深入探讨ZooKeeper的工作之前,让我们看一下ZooKeeper的基本概念。我们将在本章中讨论以下主题: - 结构 - 分层命名空间 - 会话 - 监视 ##ZooKeeper的体系结构 看下图。它描述了ZooKeeper的“客户端-服务器体系结构”。 ![](/media/editor/file_1664110274000_20220925205113780981.png) 下表说明了ZooKeeper体系结构中的每个组件。 | 组件 | 说明 | | ------------ | ------------ | | 客户端(client) | 客户端是我们分布式应用程序集群中的节点之一,可从服务器访问信息。在特定的时间间隔内,每个客户端都会向服务器发送一条消息,以使服务器知道该客户端还活着。同样,当客户端连接时,服务器会发送确认。如果连接的服务器没有响应,则客户端会自动将消息重定向到另一台服务器。 | | 服务器(Server) |服务器是ZooKeeper服务器组中的节点之一,可为客户端提供所有服务。向客户端发出确认以通知服务器处于活动状态。| |服务器组|ZooKeeper服务器组。形成集合所需的最小节点数为3(至少需要三台服务器)。| |Leader主服务器 |如果任何连接的节点发生故障,则执行自动恢复的服务器节点。在服务启动时选出Leader。| |Follower从服务器|遵循Leader指令的服务器节点。| ##分层命名空间 下图描述了用于内存表示的ZooKeeper文件系统的树结构。ZooKeeper节点称为znode。每个znode由一个名称标识,并由一系列路径(/)分隔。 在图中,首先您有一个以“/”分隔的根znode。在root下,您有两个逻辑名称空间config和worker。 config命名空间用于集中配置管理和worker命名空间用于命名。 在config命名空间下,每个znode最多可以存储1MB数据。这类似于UNIX文件系统,除了父znode也可以存储数据。该结构的主要目的是存储同步数据并描述znode的元数据。该结构称为**ZooKeeper数据模型**。 ![](/media/editor/file_1664110552000_20220925205553078886.png) ZooKeeper数据模型中的每个znode都维护一个统计结构。统计信息仅提供znode 的元数据。它由版本号,操作控制列表(ACL),时间戳和数据长度组成。 - 版本号:每个znode都有一个版本号,这意味着与znode关联的数据每次更改时,其相应的版本号也会增加。当多个Zookeeper客户端试图在同一znode上执行操作时,使用版本号很重要。 - 动作控制列表(ACL):ACL基本上是用于访问znode的身份验证机制。它控制着所有znode的读写操作。 - 时间戳:时间戳表示从znode创建和修改起经过的时间。通常用毫秒表示。ZooKeeper通过“交易ID”(zxid)识别对znode的所有更改。Zxid是唯一的,并且为每个事务维护时间,因此您可以轻松确定从一个请求到另一个请求所经过的时间。 - 数据长度:存储在znode中的数据总量就是数据长度。您最多可以存储1MB的数据。 ###Znodes的类型 Znodes分为持久性,顺序性和短暂性。 - 持久性znode:即使在断开了创建该特定znode的客户端的连接之后,持久性znode仍然有效。默认情况下,除非另有指定,否则所有znode都是持久性的。 - 临时znode:临时znode处于活动状态,直到客户端处于活动状态。当客户端与ZooKeeper集成断开连接时,临时znode会自动删除。因此,临时znode不允许再有子节点。如果删除了临时znode,则下一个合适的节点将填充其位置。临时znode在Leader选举中扮演重要角色。 - 队列znode:队列znode可以是持久性的,也可以是短暂的。当将新的znode创建为队列的znode时,ZooKeeper会通过在原始名称上附加一个10位的序列号来设置znode的路径。例如,如果将路径为/myapp的znode创建为顺序znode,则ZooKeeper会将路径更改为/myapp0000000001并将下一个序列号设置为0000000002。如果同时创建了两个队列的znode,则ZooKeeper永远不会使用相同的数字命名每个znode。队列znode在锁定和同步中起重要作用。 ##会话 会话对于ZooKeeper的操作非常重要。会话中的请求以FIFO顺序执行。客户端连接到服务器后,将建立会话并将会话ID分配给客户端。 客户端在特定时间间隔发送心跳以保持会话有效。如果ZooKeeper集合在服务启动时指定的时间段(timeout)内没有收到来自客户端的心跳,则它确定客户端死亡。 会话超时通常以毫秒为单位。当会话由于某种原因结束时,在该会话期间创建的临时znode也会被删除。 ##监视 监视是一种简单的机制,可以使客户端获得有关ZooKeeper集成中的更改的通知。客户端可以在读取特定的znode时设置监视。监视将向znode(客户机在其上注册)的任何更改发送通知到已注册的客户机。Znode更改是与znode关联的数据的修改或znode的子级中的更改。监视仅触发一次。如果客户端再次想要通知,则必须通过另一个读取操作来完成。连接会话过期后,客户端将与服务器断开连接,并且关联的监视也将被删除。
加我微信交流吧