2016-12-16 28 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(); 

現在,您將收到任何通過您註冊的聽衆發生的變化。希望你明白了。