2016-12-16 30 views
0

在3台机器上有3个动物园管理员,每个动物园管理员有一个卡夫卡经纪人。要跟踪3 数znodes的: 数量的主机的1 [1 *主机数目= 3] 是否有跟踪主机名& Z序节点与Zookeeper.Stat类变量时Z序节点将其状态改变的任何方式[caseOk/NoNode]。 试图实现一个计数器来跟踪多个主机端口上的活动znode。 在标识第一个znode的点处出现实例并重新连接实例。Zookeeper znode手表计数器

回答

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(); 

最后,创建并启动了Z序节点NodeCache情况下,每个CuratorFramework实例。

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

然后加入NodeCacheListener每个节点的缓存认购Z序节点改变。

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(); 

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