手把手带你部署ZooKeeper
Kafka服务依赖于ZooKeeper(暂不考虑KRaft模块),所以部署Kafka前需要先部署ZooKeeper服务。
部署ZooKeeper服务有两种方式:
(1)下载独立的ZooKeeper进行部署。
(2)使用Kafka提供的ZooKeeper包部署服务。笔者使用这种方式部署ZooKeeper服务。
1. 准备环境
(1)准备3台机器(或3个Docker之类的容器),操作系统为Linux系统,主机名分别为zk1、zk2、zk3,用于部署一个3节点的集群(也可以使用单节点的ZooKeeper练习)。
(2)由于Kafka 3.0开始放弃对Java 8和Scala 2.12的支持,所以笔者安装了OpenJDK 11,用于ZooKeeper、Kafka集群。JDK的安装较简单,这里不做介绍。
提示:本书介绍的部署、调试操作,如无特殊说明,均使用OpenJDK 11。
(3)下载Kafka安装包(笔者下载的是kafka_2.13-3.0.0.tgz),解压并进入kafka_2.13-3.0.0,本节操作都基于该目录。
2. 修改配置
(1)我们需要为每个ZooKeeper服务配置一个集群唯一的服务Id,该Id为一个正整数,用于标识ZooKeeper服务,存储在data/zookeeper/myid中。
$ mkdir -p /tmp/zookeeper
$ echo 1 > /tmp/zookeeper/myid
注意:这里不同ZooKeeper服务的myid需要不同,笔者分别为3个ZooKeeper节点定义了Id:1、2、3。
(2)在ZooKeeper默认的配置文件
config/zookeeper.properties中添加ZooKeeper集群信息。
tickTime=2000
initLimit=5
syncLimit=2
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
- tickTime、initLimit、syncLimit:ZooKeeper集群使用的配置,详细说明请参考ZooKeeper文档。
- 配置中的后3行为ZooKeeper集群配置,格式为server.myid=IP:Port1:Port2,myid是ZooKeeper服务Id,Port1端口用于该ZooKeeper服务与集群leader服务交换信息,Port2端口用于当集群leader服务下线时选举新的leader服务。
另外,ZooKeeper中还有如下配置需要关注:
- dataDir:ZooKeeper数据存储目录,默认为/tmp/zookeeper,如果修改了该配置,则需要在该配置指向的目录下创建myid文件。
- clientPort:ZooKeeper服务监听端口,默认为2181。
- admin.serverPort:ZooKeeper后台服务端口,默认为8080。
3. 启动ZooKeeper服务
(1)使用以下命令,在3台机器上启动ZooKeeper服务。
$ ./bin/zookeeper-server-start.sh config/zookeeper.properties
如果要在后台启动ZooKeeper服务,则可以使用以下命令:
$ ./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
ZooKeeper的日志默认输出到logs/zookeeper.out文件中。
(2)3台机器的ZooKeeper服务都启动后,在任意一个服务节点查看ZooKeeper目录。
$ ./bin/zookeeper-shell.sh localhost:2181
zk> ls /
[zookeeper]
如果能正常查看ZooKeeper目录,则说明ZooKeeper集群部署正常。关于ZooKeeper命令的使用,本书不详细介绍,请读者自行了解。
内容摘自《深入理解Kafka与Pulsar》,本书详细介绍了Kafka与Pulsar的使用方式,并深入分析了它们的实现机制。通过阅读本书,读者可以快速入门和使用Kafka与Pulsar,并深入理解它们的实现原理。
适读人群 :Kafka、Pulsar的专业技术人员。 大数据相关应用的开发者、运维者和爱好者。