Zookeeper znode 监视计数器

Zookeeper znode watch counter

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

你的问题有点含糊不清。我假设您有 3 个独立的 Zookeeper 节点(独立的或 3 个独立的整体)并希望在所有 3 个 Zookeeper 节点中的 /some/path 处观看相同的 ZNode。

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

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

to understand how to initialize a 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();

现在,您将收到通过您注册的听众发生的任何变化。希望你明白了。