2016-12-16 4 views
0

3 Tierpfleger in 3 Maschinen mit einem Kafka-Broker in jedem Tierpfleger. Anzahl von host: 3 Anzahl von znodes verfolgt werden: 1 [1 * Anzahl der Hosts = 3] Gibt es irgendeine Art und Weise den Hostnamen & ZNODE mit Zookeeper.Stat Klasse Variablen zu verfolgen, wenn ZNODE seinen Zustand ändert [FallOk/NoNode]. Der Versuch, einen Zähler zu implementieren, um den aktiven znode auf mehreren Host-Ports zu verfolgen. Straggling an einem Punkt, um den ersten znode exists existence und reconnecting instance zu identifizieren.Zookeeper Znode Uhr Counter

Antwort

0

Es gibt eine kleine Zweideutigkeit in Ihrer Frage. Ich nehme an, dass Sie 3 separate Zookeeper-Knoten (Standalone oder 3 separate Ensembles) haben und den gleichen ZNode unter /some/path in allen 3 Zookeeper-Knoten sehen möchten.

(Wenn Sie mit drei Knoten zu einem Ensemble beziehen, dann müssen Sie sich nicht um den Knoten sorgen, da das Ensemble Konsistenz über die Knoten im Ensemble garantiert)

Der einfachste Weg ist, Verwenden Sie Apache Curator Rezept (siehe recipes), NodeCache. Apache Curator ist eine Sammlung von Rezepten und eine Erweiterung des standardmäßigen ZookeeperClient. Es verwaltet intern alle Randfälle und Verbindungszustände, so dass Sie sich nicht um Schwierigkeiten im reinen Zookeeper-Client kümmern müssen. Ein NodeCache kann einen gegebenen ZNode (bei einem gegebenen ZPath) überwachen und Änderungen mitteilen, die mit diesem ZNode geschehen.

Siehe this answer zu verstehen, wie eine CuratorFramework Instanz zu initialisieren.

Sie müssen lediglich 3 CuratorFramework-Instanzen mit 3 Verbindungszeichenfolgen (für Ihre 3 Knoten) wie in der obigen Antwort beschrieben initialisieren und dann die NodeCache-Objekte für jeden Client starten.

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. 

Dann alle diese Kunden beginnen,

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

Schließlich erstellen und NodeCache Instanzen für die ZNODE für jede CuratorFramework Instanz starten.

Fügen Sie dann NodeCacheListener für jeden Knotencache hinzu, um ZNode-Änderungen zu abonnieren.

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

Dann starten Sie sie.

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

Jetzt erhalten Sie jede Änderung, die durch die Zuhörer geschehen, die Sie registriert haben. Hoffe, du hast die Idee.