Zookeeper znode смотреть счетчик

Наличие 3 зоокейперов в 3 машинах с одним брокером кафки в каждом зоопарке. число хостов: 3 количество отслеживаемых znode: 1 [1* количество хостов = 3] Есть ли способ отслеживать имя хоста и znode с помощью переменных класса Zookeeper.Stat, когда znode изменяет свое состояние [caseOk/NoNode]. Попытка реализовать счетчик для отслеживания живого узла на нескольких портах хоста. Перебегая в точку, чтобы идентифицировать первый экземпляр znode существует и переподключение экземпляра.

1 ответ

В вашем вопросе есть небольшая двусмысленность. Я предполагаю, что у вас есть 3 отдельных узла Zookeeper (автономный или 3 отдельных ансамбля) и вы хотите посмотреть один и тот же ZNode на /some/path во всех 3 узлах Zookeeper.

(Если вы имеете в виду один ансамбль с 3 узлами, вам не нужно беспокоиться об узлах, так как ансамбль будет гарантировать согласованность узлов в ансамбле)

Самый простой способ - использовать рецепт Apache Curator (см. Рецепты), NodeCache. Apache Curator представляет собой набор рецептов и расширение стандартного ZookeeperClient. Он управляет всеми пограничными случаями и состояниями соединения внутри, так что вам не придется беспокоиться о трудностях в чистом клиенте Zookeeper. NodeCache может наблюдать за данным ZNode (на данном ZPath) и уведомлять об изменениях, происходящих с этим ZNode.

Посмотрите этот ответ, чтобы понять, как инициализировать экземпляр CuratorFramework.

Все, что вам нужно сделать, это инициализировать 3 экземпляра CuratorFramework с 3 строками подключения (для ваших 3 узлов), как описано в ответе выше, а затем запустить объекты 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();

Наконец, создайте и запустите экземпляры NodeCache для ZNode для каждого экземпляра CuratorFramework.

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

Теперь вы будете получать любые изменения через зарегистрированных слушателей. Надеюсь, у вас есть идея.

Другие вопросы по тегам