Spring Cloud-ZooKeeper-01

[复制链接]
发表于 2026-2-11 09:32:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
ZooKeeper是什么

    
ZooKeeper是一个开源的分布式和谐服务,用于管理和维护分布式体系的设置信息、定名服务、状态信息等。它为分布式应用步调提供了一个可靠的、高效的、而且具有高可用性的和谐根本办法。
ZooKeeper接纳分布式的架构,通过将数据存储在多个服务器上来实现高可用性和容错性。它提供了一个简朴的条理结构的数据模子,类似于文件体系,可以类比为一个树形目次结构。每个节点都可以存储一个小于1MB的数据,而且可以设置观察者来监视节点的变革。
ZooKeeper提供了一些根本的原语操纵,如创建、删除、读取、写入和监视,可以通过这些操纵来实现分布式体系的各种功能。比方,可以使用ZooKeeper来实现分布式锁、队列、推举等。
ZooKeeper广泛应用于分布式体系中,如Hadoop、Kafka、HBase等。它提供了一个可靠的分布式和谐服务,可以资助开发者简化分布式体系的开发和管理。
作用

     
ZooKeeper是一个开源的分布式和谐服务,它提供了一种分布式体系中的同等性、可靠性、可扩展性的办理方案。ZooKeeper重要用于办理分布式应用中的一些共享资源的标题,比如数据的和谐与同步、分布式锁的管理、状态的监控监控与管理等。下面是一些ZooKeeper的重要作用:

  •         数据和谐与同步:ZooKeeper可以提供一个分布式的数据存储和共享的机制,多个客户端可以通过ZooKeeper来和谐和同步它们之间的数据。
  •         分布式锁的管理:ZooKeeper可以提供一种分布式锁的机制,多个客户端可以通过ZooKeeper来竞争和管理分布式锁,从而实现对共享资源的互斥访问。
  •         推举与向导者推举:ZooKeeper可以用于实现分布式体系中的推举算法和向导者推举,包管体系在故障规复和扩展时的同等性和可用性。
  •         设置管理:ZooKeeper可以用于实现分布式体系中的设置管理,多个节点可以通过ZooKeeper来共享和管理体系的设置信息。
  •         分布式状态的监控监控与管理:ZooKeeper可以提供一种分布式的状态监控监控和管理机制,多个节点可以通过ZooKeeper来共享和监控体系的状态。
ZooKeeper作为一个分布式和谐服务,可以提供一些共享资源的和谐和同步机制,办理分布式体系中的同等性和可靠性的标题,从而简化了分布式体系的开发和维护。
实例
  1. import org.apache.zookeeper.*;
  2. import org.apache.zookeeper.data.Stat;
  3. import java.io.IOException;
  4. public class ZooKeeperExample {
  5.     private static final String ZOOKEEPER_ADDRESS = "localhost:2181";
  6.     private static final int SESSION_TIMEOUT = 5000;
  7.     public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
  8.         ZooKeeper zooKeeper = connect();
  9.         String path = "/example";
  10.         String data = "Hello, ZooKeeper!";
  11.         createNode(zooKeeper, path, data);
  12.         String retrievedData = getNodeData(zooKeeper, path);
  13.         System.out.println("Retrieved data: " + retrievedData);
  14.         watchNode(zooKeeper, path);
  15.         Thread.sleep(60000); // Sleep for 60 seconds
  16.         close(zooKeeper);
  17.     }
  18.     private static ZooKeeper connect() throws IOException {
  19.         ZooKeeper zooKeeper = new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, event -> {
  20.             if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {
  21.                 System.out.println("Connected to ZooKeeper server");
  22.             }
  23.         });
  24.         return zooKeeper;
  25.     }
  26.     private static void createNode(ZooKeeper zooKeeper, String path, String data) throws KeeperException, InterruptedException {
  27.         byte[] dataBytes = data.getBytes();
  28.         String createdPath = zooKeeper.create(path, dataBytes, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  29.         System.out.println("Created node: " + createdPath);
  30.     }
  31.     private static String getNodeData(ZooKeeper zooKeeper, String path) throws KeeperException, InterruptedException {
  32.         byte[] dataBytes = zooKeeper.getData(path, false, null);
  33.         return new String(dataBytes);
  34.     }
  35.     private static void watchNode(ZooKeeper zooKeeper, String path) throws KeeperException, InterruptedException {
  36.         Stat stat = zooKeeper.exists(path, event -> {
  37.             if (event.getType() == Watcher.Event.EventType.NodeDataChanged) {
  38.                 System.out.println("Node data changed");
  39.                 try {
  40.                     String newData = getNodeData(zooKeeper, path);
  41.                     System.out.println("New data: " + newData);
  42.                 } catch (KeeperException | InterruptedException e) {
  43.                     e.printStackTrace();
  44.                 }
  45.             }
  46.         });
  47.         System.out.println("Watching node: " + path);
  48.     }
  49.     private static void close(ZooKeeper zooKeeper) throws InterruptedException {
  50.         zooKeeper.close();
  51.         System.out.println("Connection closed");
  52.     }
  53. }
复制代码
在这个示例中,起首通过connect方法创建了一个ZooKeeper实例,并毗连到ZooKeeper服务器。然后,调用createNode方法创建了一个名为/example的长期节点,并将数据Hello, ZooKeeper!存储在该节点上。接着,调用getNodeData方法获取了该节点的数据,并打印到控制台上。然后,调用watchNode方法监视了该节点,并在节点数据发生变革时打印新的数据。末了,通过调用close方法关闭了与ZooKeeper服务器的毗连。
Eureka和ZooKeeper区别

     
Eureka和ZooKeeper都是用于服务发现和注册的工具,但有以下区别:

  •         实用范围:Eureka重要用于云平台之间的服务注册和发现,而ZooKeeper则更广泛地应用于分布式体系中。
  •         架构模式:Eureka使用了服务器-客户端架构,此中有一个Eureka服务器作为注册中央,客户端向该服务器注册并获取服务信息。ZooKeeper使用的是会合式的服务端-客户端架构。
  •         数据复制机制:Eureka使用了主从复制的机制来实现高可用性,即有一个主注册中央和多个备份注册中央。ZooKeeper则接纳了瓦解同等性的算法,将数据和操纵复制到多个节点上以实现数据的长期化和同等性。
  •         可用性和性能:由于Eureka是计划为一个云平台之间的服务发现和注册工具,其可用性和性能方面相对较弱。ZooKeeper则在可用性和性能方面更加强大,实用于更复杂的分布式体系。
   Eureka更恰当云平台之间的服务注册和发现,而ZooKeeper则更实用于更复杂的分布式体系中,具有更好的可用性和性能。
总结  

ZooKeeper是一个分布式和谐服务,用于管理和和谐分布式应用步调中的各种服务。以下是

  •         同等性:ZooKeeper通过使用Paxos算法或Zab协议来维护分布式体系的同等性。它确保全部节点上的数据副本保持同等,并可以大概处理处罚网络分区和故障。
  •         高可用性:ZooKeeper使用主从架构,此中一个节点充当主节点,而其他节点充当从节点。假如主节点发生故障,ZooKeeper可以大概主动推举新的主节点,而且服务不会停止。
  •         数据模子:ZooKeeper将数据构造为条理结构的定名空间,类似于文件体系。每个节点都可以存储一个小的数据块,而且可以将其用于状态信息,设置数据等。
  •         Watch机制:ZooKeeper支持watch机制,此中客户端可以注册对节点的更改感爱好。当节点发生更改时,ZooKeeper会关照干系客户端,从而实现实时的变乱关照。
  •         暂时节点:ZooKeeper允许创建暂时节点,这些节点在创建它们的客户端会话关闭时主动删除。暂时节点对于跟踪在线和离线状态非常有用。
  •         序次节点:ZooKeeper还允许创建序次节点,这些节点的名称由ZooKeeper指定。序次节点可以用于实现队列等特定的应用场景。
  •         扩展性:ZooKeeper可以很容易地扩展到大规模的集群,以支持高并发的哀求。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表