![Kafka进阶](https://wfqqreader-1252317822.image.myqcloud.com/cover/408/43738408/b_43738408.jpg)
2.1.2 部署ZooKeeper的Standalone模式
将在kafka101的虚拟机上进行部署,使用的ZooKeeper的版本是zookeeper-3.4.10.tar.gz。
将安装包解压至/root/training目录。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-040-1.jpg?sign=1739147655-BC8DlSfbrMLI7qRYf9djyGQZxblHsjSq-0-7c8931da7f3f533847dcae33cefaf4fe)
设置ZooKeeper环境变量,编辑文件~/.bash_profile。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-040-2.jpg?sign=1739147655-gYWdtfNVpwcNW2Tn4HKwMg34J2dmckrM-0-31d418e48a6907a1120e86a3eda3fd1c)
生成ZooKeeper环境变量。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-041-2.jpg?sign=1739147655-ZZsYExXg0D2hChW83o0uAkGeFaFgjP41-0-a301c5528e481a2fb0bb59f516201a34)
生成zoo.cfg文件。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-041-3.jpg?sign=1739147655-PEGWDh2ObFHuP6OXAYGemCdRPhH2Ic0M-0-5c35dc0f5d0b1258a7124d0afc59015a)
编辑zoo.cfg文件,修改后的文件内容如下。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-041-4.jpg?sign=1739147655-daDqPQEE5Q4Q9G0IMPo2fyygMteNQcbJ-0-03e4e5e146a6d10ac09959d63883522d)
这里主要做了两个修改,一个是dataDir;另一个是设置了server.1。参数dataDir的含义在前面的内容中已经提到,这个参数用于指定ZooKeeper数据存储的路径,在生产环境中需要重新设置。这里我们将其修改为/root/training/zookeeper-3.4.10/tmp。
server.1用于指定ZooKeeper集群中的server节点。由于现在部署的是一个Standalone的模式,在这种模式下的集群中只存在一个ZooKeeper Server。因此,这里只设置了一个server地址,即kafka101:2888:3888。kafka101是我们在前面部署的其中一台CentOS虚拟机;端口2888表示集群内Server节点通信的端口,Leader将监听此端口;端口3888用于选举Leader使用。当ZooKeeper集群的Leader宕机后,ZooKeeper集群会通过此端口选举一个新的Leader。
进入参数dataDir指定的目录,即/root/training/zookeeper-3.4.10/tmp。创建myid文件,并在myid文件中输入1。注意,这个1用来表示server.1的ZooKeeper节点在集群中的哪个主机上。
执行命令zkServer.sh start,启动ZooKeeper Server。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-042-1.jpg?sign=1739147655-qyZHAWou8aBuLVN9aWB9YWARQL8ctgUF-0-44a4ac33de43f52f25e6d673e933a244)
执行命令zkServer.sh status,查看ZooKeeper Server的状态。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-042-2.jpg?sign=1739147655-dfyhTdGY4xjt5wQwqnD1T5Xd63DjFLpq-0-091d90448aabb1a16676dfb4ddb1c857)
也可以通过执行jps命令查看Java的后台进程信息。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-042-3.jpg?sign=1739147655-W7Yg4BFjA9BPGEuXFDeFhLJqHrcsitU0-0-ebad95856e4b4f4191961c8600a71e9d)
这里的QuorumPeerMain进程对应的就是ZooKeeper Server进程。至此,ZooKeeper Standalone模式就部署完成了。
可以使用ZooKeeper提供的CLI命令行工具操作ZooKeeper。通过下面的命令直接启动ZooKeeper的客户端,默认将其连接到本机的2181端口上。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-042-4.jpg?sign=1739147655-JK5Tv0DEjvjLA8TV0naFmmbwIKOaT8Cf-0-614baa9b4ac2e4f744403175578c1079)
也可以通过-server参数指定连接的主机和端口。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-042-5.jpg?sign=1739147655-eObwPD2Mlcm9ArX0xld5w1OplNFEgExY-0-53f05426f2520462b20487d7fb025a17)
登录ZooKeeper客户端后,可以执行help命令查看所有可用的操作命令,如下所示。通过具体的示例来演示如何使用ZooKeeper的操作命令。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-042-6.jpg?sign=1739147655-gzwdB7bRo9VytyRg5FhLvfEj4ve79qYP-0-1e0386abbaf9dff56497142ea3bc6e26)
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-043-1.jpg?sign=1739147655-xriv7c4JEYi1WuGThRFMnMAoTv5jn4cp-0-7ec976bd648ffcfdb8f95d5d19fd1ca1)
可以通过以下命令来创建ZooKeeper的节点。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-043-2.jpg?sign=1739147655-HjjaPiQzq5E60ndhvJKyUX5XS7HG7MGS-0-5339072e22475785f6f398300bd93b0f)
在ZooKeeper的根节点下,创建了node1节点,node1节点上的数据是helloworld。当ZooKeeper的节点创建完成后,通过以下命令查看当前节点列表。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-043-3.jpg?sign=1739147655-gJ2GUlvYC2AWt9LD4G5JnJ1YwsPYYpgx-0-f1f2a78c8fefab7480f7aa7f58d98ab9)
使用state命令可以查看节点状态。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-043-4.jpg?sign=1739147655-0k5pbmfE4H8R4LLa8Vg1yEz5uCeB40ED-0-94173567df919c992f55075b67a77df2)
其中,
• cZxid和ctime表示创建时的事务id和时间。
• mZxid和mtime表示最后一次更新时的事务id和时间。
• pZxid表示当前节点的子节点列表最后一次被修改时的事务id。引起子节点列表变化的两种情况是删除子节点和新增子节点。
由于ZooKeeper是通过节点来保存数据的,所以可直接通过get命令查看节点数据内容,如下所示。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-043-5.jpg?sign=1739147655-iLELvS9HtqKw8BCGwJkA3WjCf1uo0DJ8-0-387400b22b5673dfbb7f70f37e666c3b)
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-044-1.jpg?sign=1739147655-G8S1uwpwqiTOBIfKGWHOIMad9TTE63C4-0-f4e1fd24f0e20a9b91282c3e3a217781)
最后,可以使用quit命令退出ZooKeeper客户端。
![](https://epubservercos.yuewen.com/527ABA/23020654009771406/epubprivate/OEBPS/Images/42653-00-044-2.jpg?sign=1739147655-g0Hxke9KdbrwiUTzA1TZ7YCqgIZ1JqbQ-0-46d5484b1c35ec9ed5258487eea6b10b)