Zookeeper znode手表柜台

时间:2016-12-16 20:02:56

标签: apache-zookeeper znodes

在3台机器中有3名zookeeper,每个动物园管理员都有一名kafka经纪人。 主持人数:3 要跟踪的znode数量:1 [1 *主机数= 3] 当znode更改其状态[caseOk / NoNode]时,是否有任何方法可以使用Zookeeper.Stat类变量跟踪主机名& znode。 尝试实现一个计数器来跟踪多个主机端口上的活动znode。 在一个点处进行交错以识别第一个znode存在实例并重新连接实例。

1 个答案:

答案 0 :(得分:0)

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

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

最简单的方法是使用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();

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