kafka集群部署

488 阅读3分钟

image.png

# 无需zookeeper,kafka3.0版本集群安装

一、环境准备

  1. 搭建三台 Linux 服务器。我这里准备了三台IP分别是 192.168.101.235、192.168.101.236、192.168.101.237。

  2. 去kafka kafka.apache.org/downloads 官网下载一个 kafka 安装包 image.png 我这里用的是 3.0.0 版本。

  3. 下载完成安装包之后,解压到/home/kafka目录下。也可以修改-C参数自定义解压路径,如果自定义路径,注意路径下的新建的kafka用户的操作权限。 命令:

tar -zxvf kafka_2.12-3.0.0.tgz -C /home/kafka
  1. kafka3.0不再支持JDK8,建议安装JDK11或JDK17,事先安装好。

二、kafka 安装配置

  1. 新建1个目录用于保存kafka3的持久化日志数据mkdir -p /home/kafka/data/kafka3;,并保证安装kafka的用户具有该目录的读写权限。
  2. 所有安装kafka3服务器实例防火墙开放9092、9093端口,使用该端口作为controller之间的通信端口。该端口的作用与zk的2181端口类似。
  3. 在kafka3.0版本中,使用Kraft协议代替zookeeper进行集群的Controller选举,所以要针对它进行配置,所以要针对它进行配置,配置文件在kraft目录下,这与kafka2.0版本依赖zookeeper安装方式的配置文件是不同的。
vim /home/kafka/kafka_2.12-3.0.0/config/kraft/server.properties

具体的配置参数如下:

node.id=1
process.roles=broker,controller
listeners=PLAINTEXT://192.168.101.235:9092,CONTROLLER://192.168.101.235:9093
advertised.listeners = PLAINTEXT://192.168.101.235:9092
controller.quorum.voters=1@192.168.101.235:9093,2@192.168.101.236:9093,3@192.168.101.237:9093
log.dirs=/home/kafka/data/kafka3
  • node.id:这将作为集群中的节点 ID,唯一标识,按照我们事先规划好的(上文),在不同的服务器上这个值不同。其实就是kafka2.0中的broker.id,只是在3.0版本中kafka实例不再只担任broker角色,也有可能是controller角色,所以改名叫做node节点。
  • 「process.roles「:一个节点可以充当」broker」「controller」「两者兼而有之」。按照我们事先规划好的(上文),在不同的服务器上这个值不同。多个角色用逗号分开。
  • 「listeners」:broker 将使用 9092 端口,而 kraft controller控制器将使用 9093端口。
  • 「advertised.listeners」:这里指定kafka通过代理暴漏的地址,如果都是局域网使用,就配置PLAINTEXT://:9092即可。
  • **「controller.quorum.voters「:这个配置用于指定」controller主控」**选举的投票节点,所有process.roles包含controller角色的规划节点都要参与,即:其配置格式为:node.id1@host1:9093,node.id2@host2:9093
  • 「log.dirs」:kafka 将存储数据的日志目录,在准备工作中创建好的目录。

所有kafka节点都要按照上文中的节点规划进行配置,完成config/kraft/server.properties配置文件的修改。

三、 格式化存储目录

生成一个唯一的集群ID(在一台kafka服务器上执行一次即可),这一个步骤是在安装kafka2.0版本的时候不存在的。

$ /home/kafka/kafka_2.12-3.0.0/bin/kafka-storage.sh random-uuid
SzIhECn-QbCLzIuNxk1A2A

使用生成的集群ID+配置文件格式化存储目录log.dirs,所以这一步确认配置及路径确实存在,并且kafka用户有访问权限(检查准备工作是否做对)。「每一台主机服务器都要执行这个命令」

 /home/kafka/kafka_2.12-3.0.0/bin/kafka-storage.sh format \
-t SzIhECn-QbCLzIuNxk1A2A \
-c /home/kafka/kafka_2.12-3.0.0/config/kraft/server.properties

格式化操作完成之后,你会发现在我们定义的log.dirs目录下多出一个meta.properties文件。meta.properties文件中存储了当前的kafka节点的id(node.id),当前节点属于哪个集群(cluster.id)

$ cat /home/kafka/data/kafka3/meta.properties
#
#Tue Apr 12 07:39:07 CST 2022
node.id=1
version=1
cluster.id=SzIhECn-QbCLzIuNxk1A2A

四、 启动集群,完成基础测试

将下面的命令集合保存为一个shell脚本,并赋予执行权限。执行该脚本即可启动kafka集群所有的节点,使用该脚本前提是:你已经实现了集群各节点之间的ssh免密登录。

#!/bin/bash
kafkaServers='192.168.101.235 192.168.101.236 192.168.101.237'
#启动所有的kafka
for kafka in $kafkaServers
do
    ssh -T $kafka <<EOF
    nohup /home/kafka/kafka_2.12-3.0.0/bin/kafka-server-start.sh /home/kafka/kafka_2.12-3.0.0/config/kraft/server.properties 1>/dev/null 2>&1 &
EOF
echo 从节点 $kafka 启动kafka3.0...[ done ]
sleep 5
done

如果你的安装路径和我不一样,这里/home/kafka/kafka_2.12-3.0.0需要根据自己的情况修改一下。

五、一键停止集群脚本

一键停止kafka集群各节点的脚本,与启动脚本的使用方式及原理是一样的。

#!/bin/bash
kafkaServers='192.168.101.235 192.168.101.236 192.168.101.237'
#停止所有的kafka
for kafka in $kafkaServers
do
    ssh -T $kafka <<EOF

    cd /home/kafka/kafka_2.12-3.0.0
    bin/kafka-server-stop.sh
EOF
echo 从节点 $kafka 停止kafka...[ done ]
sleep 5
done