举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > zookeeper入门教程 Zookeeper 基础

zookeeper入门教程 Zookeeper 基础

2023-04-20 20:18 Zookeeper教程

zookeeper入门教程 Zookeeper 基础

zookeeper入门教程

Zookeeper是一个分布式的,开源的分布式应用程序协调服务,它允许系统中的应用程序通过一致性服务来协调它们之间的活动。它可以用于在分布式系统中存储和共享配置信息,同步数据,并且可以用于实施集群管理。

本文将介绍如何使用Zookeeper来构建一个分布式应用。首先,我们将介绍Zookeeper的基本概念,然后我们将学习如何使用Zookeeper API来实施分布式应用。最后,我们将看看如何使用Zookeeper来监控和优化分布式应用。

1. Zookeeper 基本概念

Zookeeper是一个分布式的、可靠的、高性能的、可扩展的、易于使用的协调服务。它是一个基于Java语言实现的Apache项目,既可以作为独立运行的服务也可以作为一个独立进程运行在Hadoop集群上。

Zookeeper使得在分布式应用中共享数据变得容易。客户端可以通过API来请求数据,而不必耗费大量时间去处理复杂的通信协议。此外,Zookeeper还能够监测集群中各个节点之间的通信情况,并能够根据情况采取补救措施。

2. 使用 Zookeeper API 构建分布式应用

// 创建 Zookeeper 客户端对象 
 ZooKeeper zk = new ZooKeeper("localhost:2181", 3000, new Watcher() { 

    public void process(WatchedEvent event) { 

        // 监听回调函数 

    } 
}); 
// 创建一个 ZNode 节点 
String path = zk.create("/mynode", "data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 
System.out.println("Created ZNode: " + path); 
// 获取 ZNode 节点数据 
byte[] data = zk.getData("/mynode", false, null); 
System.out.println("Data of ZNode: " + new String(data)); 

上面代码中,我们使用 Zookeeper API 来创建一个 ZNode 节点并读取其数据。在 Zookeeper API 的 create() 方法中,我们传入了要创建 ZNode 的名字、要存储在该 ZNode 的数据、ACL 权限信息、ZNode 类型信息四个参数。然后我们使用 getData() 方法来读取 ZNode 的数据内容。

3. 监测和优化分布式应用

// 连接 Zookeeper 服务端并注册 Watcher 事件监听对象    ZooKeeper zk = new ZooKeeper("localhost:2181", 3000, new Watcher() {     public void process(WatchedEvent event) {         // 监听回调函数     } }); // 这里注册 Watcher 和 Path (/mynode )     Stat stat = zk.exists("/mynode", true);     if (stat != null) {         System.out.println("/mynode exists");     } else {         System.out.println("/mynode does not exist");     } 

上面代码中,我们使用 exists() 方法来注册 Watcher 和 Path ( /mynode ) (也就是要监测 /mynode 节

Zookeeper 基础

在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念。我们将在本章中讨论以下主题:


1、Architecture(架构)


2、Hierarchical namespace(层次命名空间)


3、Session(会话)


4、Watches(监视)


ZooKeeper的架构

看看下面的图表。它描述了ZooKeeper的“客户端-服务器架构”。

ZooKeeper的架构

作为ZooKeeper架构的一部分的每个组件在下表中进行了说明。

部分描述
Client(客户端)

客户端,我们的分布式应用集群中的一个节点,从服务器访问信息。对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。

类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。

Server(服务器)服务器,我们的ZooKeeper总体中的一个节点,为客户端提供所有的服务。向客户端发送确认码以告知服务器是活跃的。
EnsembleZooKeeper服务器组。形成ensemble所需的最小节点数为3。
Leader服务器节点,如果任何连接的节点失败,则执行自动恢复。Leader在服务启动时被选举。
Follower跟随leader指令的服务器节点

层次命名空间

下图描述了用于内存表示的ZooKeeper文件系统的树结构。ZooKeeper节点称为 znode 每个znode由一个名称标识,并用路径(/)序列分隔。

  • 在图中,首先有一个由“/”分隔的znode。在根目录下,你有两个逻辑命名空间 config workers

  • config 命名空间用于集中式配置管理,workers 命名空间用于命名。

  • config 命名空间下,每个znode最多可存储1MB的数据。这与UNIX文件系统相类似,除了父znode也可以存储数据。这种结构的主要目的是存储同步数据并描述znode的元数据。此结构称为 ZooKeeper数据模型

分层命名空间

Znode兼具文件和目录两种特点。既像文件一样维护着数据长度、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。每个Znode由三个部分组成:

  • stat:此为状态信息,描述该Znode版本、权限等信息。
  • data:与该Znode关联的数据
  • children:该Znode下的节点


  • 版本号 - 每个znode都有版本号,这意味着每当与znode相关联的数据发生变化时,其对应的版本号也会增加。当多个zookeeper客户端尝试在同一znode上执行操作时,版本号的使用就很重要。

  • 操作控制列表(ACL) - ACL基本上是访问znode的认证机制。它管理所有znode读取和写入操作。

  • 时间戳 - 时间戳表示创建和修改znode所经过的时间。它通常以毫秒为单位。ZooKeeper从“事务ID"(zxid)标识znode的每个更改。Zxid 是唯一的,并且为每个事务保留时间,以便你可以轻松地确定从一个请求到另一个请求所经过的时间。

  • 数据长度 - 存储在znode中的数据总量是数据长度。你最多可以存储1MB的数据。

Znode的类型

Znode被分为持久(persistent)节点,顺序(sequential)节点和临时(ephemeral)节点。

  • 持久节点  - 即使在创建该特定znode的客户端断开连接后,持久节点仍然存在。默认情况下,除非另有说明,否则所有znode都是持久的。

  • 临时节点 - 客户端活跃时,临时节点就是有效的。当客户端与ZooKeeper集合断开连接时,临时节点会自动删除。因此,只有临时节点不允许有子节点。如果临时节点被删除,则下一个合适的节点将填充其位置。临时节点在leader选举中起着重要作用。

  • 顺序节点 - 顺序节点可以是持久的或临时的。当一个新的znode被创建为一个顺序节点时,ZooKeeper通过将10位的序列号附加到原始名称来设置znode的路径。例如,如果将具有路径 /myapp 的znode创建为顺序节点,则ZooKeeper会将路径更改为 /myapp0000000001 ,并将下一个序列号设置为0000000002。如果两个顺序节点是同时创建的,那么ZooKeeper不会对每个znode使用相同的数字。顺序节点在锁定和同步中起重要作用。

Sessions(会话)

会话对于ZooKeeper的操作非常重要。会话中的请求按FIFO顺序执行。一旦客户端连接到服务器,将建立会话并向客户端分配会话ID

客户端以特定的时间间隔发送心跳以保持会话有效。如果ZooKeeper集合在超过服务器开启时指定的期间(会话超时)都没有从客户端接收到心跳,则它会判定客户端死机。

会话超时通常以毫秒为单位。当会话由于任何原因结束时,在该会话期间创建的临时节点也会被删除。

Watches(监视)

监视是一种简单的机制,使客户端收到关于ZooKeeper集合中的更改的通知。客户端可以在读取特定znode时设置Watches。Watches会向注册的客户端发送任何znode(客户端注册表)更改的通知。

Znode更改是与znode相关的数据的修改或znode的子项中的更改。只触发一次watches。如果客户端想要再次通知,则必须通过另一个读取操作来完成。当连接会话过期时,客户端将与服务器断开连接,相关的watches也将被删除。


阅读全文
以上是编程学为你收集整理的zookeeper入门教程 Zookeeper 基础全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部