Zookeeper znode和watcher for / zookeeper / config,从外部java客户端进行外部访问

时间:2015-12-01 02:52:45

标签: apache-zookeeper

zookeeper znodes在哪里?

在浏览了apache zookeeper文档,一本动物园管理员的书,然后用谷歌搜索我似乎还无法弄清楚znodes在计算机中的实际驻留位置(他们坐在计算机中的哪个目录或文件?)。我了解如何使用get和stat在zkCli.sh CLI中访问它们,它们提供了znode及其数据的详细信息,但在运行搜索这些/ znodes之后,我什么也没有得到。这些znodes不是真正的目录/文件夹吗?它们是否存在于分散在某个地方的碎片元素,我无法在外部方便地访问它?

我想要做的是在znode ZooDefs.CONFIG_NODE = / zookeeper / config上设置监视。我知道如何使用“config -w”来做到这一点,但是我仍然不确定如何使用该手表的输出来监视/ zookeeper / config节点的变化,即我怎样才能“获取信号”例如,在触发它和它的时间戳之后观察并将其设置为变量。 (也许最简单的方法就是使用一个python脚本将“zkClient.sh -server x.x.x.x:xxx stat / zookeeper / config”发送到远程设备并读取输出?)

我读到被触发的手表发送回调,这个回调是一个可以编写/修改的方法,但我只是想知道“config -w”手表输出是什么以及我可以抓住它的“回调” “或输出信号。

1 个答案:

答案 0 :(得分:1)

实际上,这些创建的znode实际上并不存在于某个目录中。你的假设是对的。当然,你找不到这样一个保存znode的目录/文件夹。 ZooKeeper使用内存缓存和文件/快照来存储这些数据。您可能还记得在zoo.cfg中配置了一个名为dataDir的选项,该选项用于引用存储快照的目录。

以下是我的ZooKeeper(版本:3.4.6)所在的结构。简而言之,我已将dataDir配置为与源代码相同。您可能会找到文件夹名称版本-2,数据文件所在的位置。

# tree -L 1 —charset ascii
.
|— bin
|— build.xml
|— CHANGES.txt
|— conf
|— contrib
|— dist-maven
|— docs
|— ivysettings.xml
|— ivy.xml
|— lib
|— LICENSE.txt
|— myid
|— NOTICE.txt
|— README_packaging.txt
|— README.txt
|— recipes
|— src
|— version-2
|— zookeeper-3.4.6.jar
|— zookeeper-3.4.6.jar.asc
|— zookeeper-3.4.6.jar.md5
|— zookeeper-3.4.6.jar.sha1
|— zookeeper.out
`— zookeeper_server.pid

9 directories, 15 files
# cd version-2/
# tree -L 1 —charset ascii
.
|— acceptedEpoch
|— currentEpoch
|— log.200000001
|— log.2000001f6
|— snapshot.0
|— snapshot.100000000
|— snapshot.200000123
|— snapshot.2000001de
|— snapshot.2000001f5
`— snapshot.20000050e

0 directories, 10 files
#

您可以找到快照。*文件,在那里可以找到答案。

为了在znode上观看,我建议您使用ZooKeeper Java API,ZooKeeper Python Client等编写自己的脚本。您可以在特定的znode上设置监视/挂钩,然后在对znode进行更改时处理脚本