【问题标题】:Zookeeper znode watch counterZookeeper znode 监视计数器
【发布时间】:2016-12-17 18:09:35
【问题描述】:

在 3 台机器上有 3 个 zookeeper,每个 zookeeper 有一个 kafka 代理。 主机数量:3 要跟踪的 znode 数量:1 [1* 主机数量 = 3] 当znode 更改其状态[caseOk/NoNode] 时,是否有任何方法可以使用Zookeeper.Stat 类 变量跟踪主机名和znode。 试图实现一个计数器来跟踪多个主机端口上的活动 znode。 在某个点上徘徊以识别第一个 znode 存在实例并重新连接实例。

【问题讨论】:

    标签: apache-zookeeper znodes


    【解决方案1】:

    您的问题有点含糊不清。我假设您有 3 个独立的 Zookeeper 节点(独立或 3 个独立的集成),并且希望在所有 3 个 Zookeeper 节点中在/some/path 观看同一个 ZNode。

    (如果您指的是具有 3 个节点的单个 ensemble,那么您不必担心节点,因为 ensemble 将保证 ensemble 中节点的一致性)

    最简单的方法是使用Apache Curator 配方(参见recipes)、NodeCache。 Apache Curator 是一组配方和标准 ZookeeperClient 的扩展。它在内部管理所有边缘情况和连接状态,因此您不必担心纯 Zookeeper 客户端的困难。 NodeCache 可以监视给定的 ZNode(在给定的 ZPath 上)并通知该 ZNode 发生的变化。

    请参阅 this answer 以了解如何初始化 CuratorFramework 实例。

    您所要做的就是按照上述答案中的说明使用 3 个连接字符串(用于您的 3 个节点)初始化 3 个 CuratorFramework 实例,然后为每个客户端启动 NodeCache 对象。

    CuratorFramework client1=//create CuratorFramework intance with corresponding connection string.
    CuratorFramework client2=//create CuratorFramework intance with corresponding connection string.
    CuratorFramework client3=//create CuratorFramework intance with corresponding connection string. 
    

    然后启动所有这些客户端,

    client1.start();
    client2.start();
    client3.start();
    

    最后,为每个 CuratorFramework 实例的 ZNode 创建并启动 NodeCache 实例。

    NodeCache znode1=new NodeCache(client1, "/znode/path");
    NodeCache znode2=new NodeCache(client2, "/znode/path");
    NodeCache znode3=new NodeCache(client3, "/znode/path");
    

    然后为每个节点缓存添加NodeCacheListener来订阅ZNode的变化。

    znode1.getListenable().addListener({listener class implementing NodeCacheListener});
    znode2.getListenable().addListener({listener class implementing NodeCacheListener});
    znode3.getListenable().addListener({listener class implementing NodeCacheListener});
    

    然后,启动它们。

    znode1.start();
    znode2.start();
    znode3.start();
    

    现在,您将通过您注册的侦听器收到任何更改。希望你明白了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 2015-10-29
      • 2015-10-31
      • 2013-08-01
      • 2019-03-12
      • 1970-01-01
      相关资源
      最近更新 更多