一、kafka集群实例人物规划
在kafka3.0中现已能够将zookeeper去掉,运用kraft机制实现controller主控制器的推举。所以咱们先简略了解下kafka2.0和3.0在这方面的区别。 上图中黑色代表Broker(音讯署理服务),褐色/蓝色代表Controller(集群控制器服务)
-
左图(kafka2.0):一个集群一切节点都是Broker人物,kafka从三个Broker中推举出来一个Controller控制器,控制器将集群元数据信息(比方主题分类、消费进度等)保存到zookeeper,用于集群各节点之间分布式交互。
-
右图(kafka3.0):假定一个集群有四个Broker,人为指定其中三个作为Conreoller人物(蓝色),从三个Controller中推举出来一个Controller作为主控制器(褐色),其他的2个备用。zookeeper不再被需求!相关的元数据信息以kafka日志的形式存在(即:以音讯行列音讯的形式存在)。
理解了上面的右图,咱们就不难理解在搭建kafka3.0集群之前,咱们需求先做好kafka实例人物规划。(四个Broker,需求经过主动装备指定三个作为Controller,Controller需求奇数个,这一点和zk是相同的)
主机称号 | ip | 人物 | node.id |
---|---|---|---|
zimug1 | 192.168.1.111 | broker,controller | 1 |
zimug2 | 192.168.1.112 | broker,controller | 2 |
zimug3 | 192.168.1.113 | broker,controller | 3 |
zimug4 | 192.168.1.113 | broker | 4 |
二、预备工作
- 在kafka用户(新建的kafka用户,不要运用root用户)下新建一个目录作为kafka3装置目录,并运用wget下载一个3.10版别的装置包。
$mkdirkafka3-setup;
$cdkafka3-setup/;
$wgethttps://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
-
另外kafka3.0不再支撑JDK8,建议装置JDK11或JDK17,事前装置好。
-
新建1个目录用于保存kafka3的持久化日志数据
mkdir -p /home/kafka/data/kafka3;
,并保证装置kafka的用户具有该目录的读写权限。 -
(这儿需求运用root用户)一切装置kafka3服务器实例防火墙开放9092、9093端口,运用该端口作为controller之间的通讯端口。该端口的作用与zk的2181端口相似。
-
下载完成装置包之后,解压到
/home/kafka
目录下。也能够修正-C
参数自界说解压途径,假如自界说途径,注意途径下的新建的kafka用户的操作权限。
tar-xzvf./kafka_2.13-3.1.0.tgz-C/home/kafka
三、修正Kraft协议装备文件
在kafka3.0版别中,运用Kraft协议代替zookeeper进行集群的Controller推举,所以要针对它进行装备,所以要针对它进行装备,装备文件在kraft目录下,这与kafka2.0版别依赖zookeeper装置方法的装备文件是不同的。
vim/home/kafka/kafka_2.13-3.1.0/config/kraft/server.properties
具体的装备参数如下:
node.id=1
process.roles=broker,controller
listeners=PLAINTEXT://zimug1:9092,CONTROLLER://zimug1:9093
advertised.listeners=PLAINTEXT://:9092
controller.quorum.voters=1@zimug1:9093,2@zimug2:9093,3@zimug3: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人物的规划节点都要参与,即:zimug1、zimug2、zimug3。其装备格式为:node.id1@host1:9093,node.id2@host2:9093
-
「log.dirs」:kafka 将存储数据的日志目录,在预备工作中创建好的目录。
一切kafka节点都要依照上文中的节点规划进行装备,完成config/kraft/server.properties
装备文件的修正。
三、格式化存储目录
生成一个仅有的集群ID(在一台kafka服务器上履行一次即可),这一个步骤是在装置kafka2.0版别的时候不存在的。
$/home/kafka/kafka_2.13-3.1.0/bin/kafka-storage.shrandom-uuid
SzIhECn-QbCLzIuNxk1A2A
运用生成的集群ID+装备文件格式化存储目录log.dirs
,所以这一步承认装备及途径的确存在,而且kafka用户有拜访权限(查看预备工作是否做对)。「每一台主机服务器都要履行这个命令」
/home/kafka/kafka_2.13-3.1.0/bin/kafka-storage.shformat
-tSzIhECn-QbCLzIuNxk1A2A
-c/home/kafka/kafka_2.13-3.1.0/config/kraft/server.properties
格式化操作完成之后,你会发现在咱们界说的log.dirs
目录下多出一个meta.properties文件。meta.properties文件中存储了当时的kafka节点的id(node.id
),当时节点属于哪个集群(cluster.id
)
$cat/home/kafka/data/kafka3/meta.properties
#
#TueApr1207:39:07CST2022
node.id=1
version=1
cluster.id=SzIhECn-QbCLzIuNxk1A2A
四 发动集群,完成根底测试
zimug1 zimug2 zimug3
是三台应用服务器的主机称号(参阅上文中的人物规划),在linux的/etc/hosts
主机名与ip进行关系映射。将下面的命令集合保存为一个shell脚本,并赋予履行权限。履行该脚本即可发动kafka集群一切的节点,运用该脚本条件是:你现已实现了集群各节点之间的ssh免密登录。
#!/bin/bash
kafkaServers='zimug1zimug2zimug3'
#发动一切的kafka
forkafkain$kafkaServers
do
ssh-T$kafka<<EOF
nohup/home/kafka/kafka_2.13-3.1.0/bin/kafka-server-start.sh/home/kafka/kafka_2.13-3.1.0/config/kraft/server.properties1>/dev/null2>&1&
EOF
echo从节点$kafka发动kafka3.0...[done]
sleep5
done
假如你的装置途径和我不相同,这儿/home/kafka/kafka_2.13-3.1.0
需求依据自己的状况修正一下。
五、一键中止集群脚本
一键中止kafka集群各节点的脚本,与发动脚本的运用方法及原理是相同的。
#!/bin/bash
kafkaServers='zimug1zimug2zimug3'
#中止一切的kafka
forkafkain$kafkaServers
do
ssh-T$kafka<<EOF
cd/home/kafka/kafka_2.13-3.1.0
bin/kafka-server-stop.sh
EOF
echo从节点$kafka中止kafka...[done]
sleep5
done
码文不易,假如您觉得有协助,请帮忙点击在看或者分享,没有您的支撑我或许无法坚持下去! 欢迎重视公众号:字母哥杂谈,回复003赠送作者专栏《docker修炼之道》的PDF成书版别。 字母哥博客:zimug.com