欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kafka多节点环境安装

程序员文章站 2022-03-02 17:00:37
...

4.3.1 安装多节点ZooKeeper集群

目前来说Kafka可以说是强依赖ZooKeeper的,因此生产环境中一个高可用、高可靠的ZooKeeper集群也必不可少的。ZooKeeper集群通常被称为一个ensemble。只要这个ensemble中的大多数节点存活,那么ZooKeeper集群就能正常提供服务。显然,既然是大多数,那么最好使用奇数个服务器,即2n+1个服务器,这样整个ZooKeeper集群最多可以容忍n台服务器宕机而保证依然提供服务。如果使用偶数个服务器则通常会浪费一台服务器的资源。

基于上面的规则,一个生产环境中最少的ZooKeeper集群节点数量是3。在实际使用场景中,5台服务器构成的ZooKeeper集群也是十分常见的,再多数量的集群则不常见。

典型的多节点环境配置文件zoo.cfg

tickTime=2000

dataDir=/usr/zookeeper/data_dir

clientPort=2181

initLimit=5

syncLimit=2

server.1=zk1:2888:3888

server.2=zk2:2888:3888

server.3=zk3:2888:3888

关键参数的含义:

  • tickTime: ZooKeeper最小的时间单位,用于丈量心跳时间和超时时间等。通常设置成默认值2秒即可。
  • dataDirZooKeeper会在内存中保存系统快照,并定期写入该路径指定的文件夹中。生产环境中需要注意该文件夹的磁盘占用情况。
  • clientPortZooKeeper监听客户端连接的端口,一般设置成默认值2181即可。
  • initLimit:指定follower节点初始时连接leader节点的最大tick次数。假设是5,表示follower必须在5*tickTime时间内(默认值10秒)连接上leader,否则将被视为超时。
  • syncLimit:设定follower节点与leader节点进行同步的最大时间。与initLimit类似,它也是以tickTime为单位进行指定的。
  • server.X=host:port:port:配置文件中的最后三行都是这种形式的。这里的X必须是一个全局唯一的数字,且需要与myid文件中的数字相对应。一般设置X1-255之间的整数。这行的后面还配置了两个端口,通常是28882888。第一个端口用于使follower节点连接leader节点,而第二个端口则用于leader选举。

 

      每个ZooKeeper服务器都有一个唯一的ID。这个ID主要用在两个地方:一个是刚刚我们配置的zoo.cfg文件,另一个则是myid文件。myid文件位于zoo.cfgdataDir配置的目录下,其内容也很简单,仅是一个数字,即ID

 

下面就以一台机器为例展示如何安装3个节点的ZooKeeper集群,多台机器上安装的方法类似。

首先,在zookeeperconf目录下创建3个配置文件zoo1.cfgzoo2.cfgzoo3.cfg,注意,如果是在多台服务器上安装ZooKeeper集群,可以选取相同的配置文件名字。

zoo1.cfg

tickTime=2000

dataDir=/mnt/disk/huxitest/data_logs/zookeeper1

clientPort=2181

initLimit=5

syncLimit=2

server.1=zk1:2888:3888

server.2=zk2:2889:3889

server.3=zk3:2890:3890

zoo2.cfg

tickTime=2000

dataDir=/mnt/disk/huxitest/data_logs/zookeeper2

clientPort=2182

initLimit=5

syncLimit=2

server.1=zk1:2888:3888

server.2=zk2:2889:3889

server.3=zk3:2890:3890

zoo3.cfg

tickTime=2000

dataDir=/mnt/disk/huxitest/data_logs/zookeeper3

clientPort=2183

initLimit=5

syncLimit=2

server.1=zk1:2888:3888

server.2=zk2:2889:3889

server.3=zk3:2890:3890

上面的配置中分别选取了2181218221833个端口。如果是多机器安装方案,指定相同的端口号也可以,只要确保没有端口冲突就行,这也包括配置文件中的所有其他端口。

下一步是创建myid文件,myid文件必须位于配置文件的dataDir中,即/mnt/disk/huxitest/data_logs/zookeeper1,2,3下,具体命令如下:

echo "1" > /mnt/disk/huxitest/data_logs/zookeeper1/myid

echo "2" > /mnt/disk/huxitest/data_logs/zookeeper2/myid

echo "3" > /mnt/disk/huxitest/data_logs/zookeeper3/myid

下一步就是启动3个控制台终端分别在ZooKeeper的安装目录下执行以下命令启动ZooKeeper服务器:

java -cp zookeeper-3.4.10.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo1.cfg

java -cp zookeeper-3.4.10.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo2.cfg

java -cp zookeeper-3.4.10.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo3.cfg

如果是多节点安装方案,既可以使用上面的命令启动ZooKeeper,也可以直接运行zkServer脚本启动ZooKeeper,比如:

bin/zkServer.sh(bat) start conf/zoo.cfg

当所有的ZooKeeper服务器启动成功后,我们还需要检查一下整个集群的状态,分别执行以下命令:

bin/zkServer.sh status conf/zoo1.cfg

bin/zkServer.sh status conf/zoo2.cfg

bin/zkServer.sh status conf/zoo3.cfg

 

4.3.2 安装多节点的Kafka

下面使用一台机器来模拟一个3节点Kafka集群的搭建,多台机器搭建的方式类似。

创建多份配置,配置文件1

broker.id=0

delete.topic.enable=true

listeners=PLAINTEXT://kafka1:9092

log.dirs=/mnt/disk/huxitest/data_logs/kafka1

zookeeper.connect=zk1:8001,zk2:8002,zk3:8003

unclean.leader.election.enable=false

zookeeper.connection.timeout.ms=6000

配置文件2

broker.id=1

delete.topic.enable=true

listeners=PLAINTEXT://kafka2:9092

log.dirs=/mnt/disk/huxitest/data_logs/kafka2

zookeeper.connect=zk1:8001,zk2:8002,zk3:8003

unclean.leader.election.enable=false

zookeeper.connection.timeout.ms=6000

配置文件3

broker.id=2

delete.topic.enable=true

listeners=PLAINTEXT://kafka3:9092

log.dirs=/mnt/disk/huxitest/data_logs/kafka3

zookeeper.connect=zk1:8001,zk2:8002,zk3:8003

unclean.leader.election.enable=false

zookeeper.connection.timeout.ms=6000

    在上面3个配置文件中我们需要每台Kafka服务器指定不同的broker ID。该ID在整个集群中必须是唯一的。而配置listeners时最好使用节点的FQDNFully Qualified Domain Name)即全称域名,尽量不要使用IP地址。zookeeper.connect必须同时指定所有的ZooKeeper节点。

 

创建Kafka配置文件后,只需要执行下列命令启动Kafka broker服务器:

bin/kafka-server-start.sh -daemon config/server1.properties

bin/kafka-server-start.sh -daemon config/server2.properties

bin/kafka-server-start.sh -daemon config/server3.properties

可以通过查看位于Kafka logs目录下的server.logjps命令来确认Kafka broker是否已经启动成功。