Kafka从上手到实践-Zookeeper CLI:CRUD zNode

栏目: 后端 · 发布时间: 6年前

内容简介:在第七章节搭建单机Kafka中,我们已经发现了,Kafka是自带Zookeeper的,而且在启动Kafka之前,要先启动Zookeeper,相当于启动了单机Zookeeper,所以我们先说Zookeeper CLI,后面说Zookeeper集群时再具体说配置参数。首先打开终端,连接至我们的服务器,进入这是Zookeeper CLI Client连接Zookeeper的命令,当看到如下信息时,说明连接成功:

在第七章节搭建单机Kafka中,我们已经发现了,Kafka是自带Zookeeper的,而且在启动Kafka之前,要先启动Zookeeper,相当于启动了单机Zookeeper,所以我们先说Zookeeper CLI,后面说Zookeeper集群时再具体说配置参数。

展示zNode

首先打开终端,连接至我们的服务器,进入 /root/kafka_2.12-2.0.0/bin 目录,执行如下命令:

sh zookeeper-shell.sh 127.0.0.1:2181

这是Zookeeper CLI Client连接Zookeeper的命令,当看到如下信息时,说明连接成功:

Connecting to 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is disabled

先来来看看目前Zookeeper里都有哪些zNode:

ls /

[cluster, controller_epoch, controller, brokers, zookeeper, kafka-manager, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]

ls 命令和 Linux 中的作用一样,在Zookeeper中是展示某个zNode下的所有zNode。这里的 / 表示根zNode。可以看到已经有很多zNode注册在了Zookeeper。再来看看 brokers 下还有哪些zNode:

ls /brokers

[ids, topics, seqid]

再来看看有哪些Topic:

ls /brokers/topics

[with_keys_topic, first_topic, __consumer_offsets, configured-topic]

查看zNode存储的数据

在上一章节中说过,Zookeeper中的zNode是可以存储数据的,那么我们来看看如何查看zNode中存储的数据,比如我们来看看 /brokers/ids 里保存了什么数据:

get /brokers/ids

null
cZxid = 0x5
ctime = Wed Dec 19 23:46:53 CST 2018
mZxid = 0x5
mtime = Wed Dec 19 23:46:53 CST 2018
pZxid = 0x43d
cversion = 51
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

get 命令用于查看zNode中存储的数据,从上面的结果看到, /brokers/ids 这个zNode里的数据是 null ,那么看看是否 /brokers/ids 下还有zNode:

ls /brokers/ids

[0]

果然, /brokers/ids 下还有zNode,这个zNode很明显是以Broker ID命名的。那再来看看 /brokers/ids/0 里存储了什么样的数据:

get /brokers/ids/0

{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://ECS外网IP:9092"],"jmx_port":-1,"host":"ECS外网IP","timestamp":"1546570570448","port":9092,"version":4}
cZxid = 0x43d
ctime = Fri Jan 04 10:56:10 CST 2019
mZxid = 0x43d
mtime = Fri Jan 04 10:56:10 CST 2019
pZxid = 0x43d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100363316d3004a
dataLength = 192
numChildren = 0

从上面的结果可以看到,第一行显示的就是zNode存储的数据, /brokers/ids/0 这个zNode存储了Broker的IP、端口、注册时间戳、JMX端口等信息。这一行之后的信息都是zNode的标准属性了,有各种时间戳、版本号、数据长度、子节点数等。

创建zNode

我们可以使用Zookeeper CLI自行创建zNode:

create /my_node "some data"

Created /my_node

ls /

[cluster, controller, brokers, zookeeper, my_node, admin, isr_change_notification, log_dir_event_notification, controller_epoch, kafka-manager, consumers, latest_producer_id_block, config]

使用 create 命令创建zNode。这里要注意的是,在创建zNode时必须要带着存储数据,哪怕是空也可以:

create /my_node ""

否则是无法创建zNode的。

在创建zNode时不可以一次性创建多级zNode,如果还没有创建 my_node ,直接创建 deeper_node 是不可以的:

create /my_node/deeper_node "some data"
Node does not exist: /my_node/deeper_node

所以Zookeeper要一层一层创建zNode:

create /my_node "some data"
Created /my_node
create /my_node/deeper_node "some data"
Created /my_node/deeper_node

get /my_node/deeper_node
some data
cZxid = 0x454
ctime = Mon Jan 07 19:12:20 CST 2019
mZxid = 0x454
mtime = Mon Jan 07 19:12:20 CST 2019
pZxid = 0x454
cversion = 0

更新zNode的数据

我们可以通过 set 命令更新zNode中存储的数据:

set /my_node "new data"
cZxid = 0x453
ctime = Mon Jan 07 19:12:07 CST 2019
mZxid = 0x455
mtime = Mon Jan 07 19:14:04 CST 2019
pZxid = 0x454
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 1

get /my_node
new data
cZxid = 0x453
ctime = Mon Jan 07 19:12:07 CST 2019
mZxid = 0x455
mtime = Mon Jan 07 19:14:04 CST 2019
pZxid = 0x454
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 1

可以看到 dataVersioncversion 从0变成了1。这里注意一下,每当更新zNode存储的数据时, dataVersion 会递增,之所以 cversion 也递增了是因为更新数据本身也是对zNode的修改,如果我们再更新一次数据,就只有 dataVersion 会递增了,因为第一次和第二次都是对zNode存储的数据的修改,只算作一次zNode的改变,所以 cversion 不会再更新:

set /my_node "again new data"
cZxid = 0x453
ctime = Mon Jan 07 19:12:07 CST 2019
mZxid = 0x456
mtime = Mon Jan 07 19:16:24 CST 2019
pZxid = 0x454
cversion = 1
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 14
numChildren = 1

如果想让 cversion 变化,那么给 my_node 再增加一个zNode:

create /my_node/another_node "some data"
Created /my_node/another_node
get /my_node
again new data
cZxid = 0x453
ctime = Mon Jan 07 19:12:07 CST 2019
mZxid = 0x456
mtime = Mon Jan 07 19:16:24 CST 2019
pZxid = 0x457
cversion = 2
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 14
numChildren = 2

可以看到 cversionnumChildren 都变了。

添加zNode Watcher

上一章节同样说过,Zookeeper中的zNode的所有变更都可以被监控到。来看看如何通过CLI给zNode添加Watcher。我们给 /my_node/deeper_node 添加Watcher:

get /my_node/deeper_node true
some data
cZxid = 0x454
ctime = Mon Jan 07 19:12:20 CST 2019
mZxid = 0x454
mtime = Mon Jan 07 19:12:20 CST 2019
pZxid = 0x454
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

通过 get /zNode true 给zNode添加Watcher。当 /my_node/deeper_node 修改数据时,就会收到监听事件了:

set /my_node/deeper_node "new data"

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/my_node/deeper_node
cZxid = 0x454
ctime = Mon Jan 07 19:12:20 CST 2019
mZxid = 0x458
mtime = Mon Jan 07 19:24:05 CST 2019
pZxid = 0x454
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

删除zNode

可以通过 rmr 命令删除zNode,该命令是递归删除,既可以删除指定zNode以及该zNode下的所有zNode:

rmr /my_node
ls /
[cluster, controller, brokers, zookeeper, admin, isr_change_notification, log_dir_event_notification, controller_epoch, kafka-manager, consumers, latest_producer_id_block, config]

以上所述就是小编给大家介绍的《Kafka从上手到实践-Zookeeper CLI:CRUD zNode》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

RESTful Web Services Cookbook

RESTful Web Services Cookbook

Subbu Allamaraju / Yahoo Press / 2010-3-11 / USD 39.99

While the REST design philosophy has captured the imagination of web and enterprise developers alike, using this approach to develop real web services is no picnic. This cookbook includes more than 10......一起来看看 《RESTful Web Services Cookbook》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换