사육사 불필요, kafka3.0 버전 클러스터 설치 실제 전투

1. Kafka 클러스터 인스턴스 역할 계획

kafka3.0에서는 사육사를 제거할 수 있으며 크래프트 메커니즘을 사용하여 컨트롤러 마스터 컨트롤러의 선택을 실현합니다. 따라서 이와 관련하여 Kafka 2.0과 3.0의 차이점을 간단히 이해해 보겠습니다. 그림위 그림에서 검정색은 Broker(메시지 중개 서비스), 갈색/파란색은 Controller(클러스터 컨트롤러 서비스)를 나타냅니다.

  • 왼쪽 그림(kafka2.0): 클러스터의 모든 노드는 브로커이며, 카프카는 세 브로커 중에서 컨트롤러를 선택하고 컨트롤러는 클러스터 메타데이터 정보(토픽 분류, 소비 진행 등)를 사육사에 저장합니다. 클러스터의 노드 간의 상호 작용.

  • 오른쪽 그림(kafka3.0): 클러스터에 4개의 브로커가 있고 그 중 3개가 Conreoller 역할로 지정되고(파란색), 3개의 컨트롤러 중에서 1개의 컨트롤러가 주 컨트롤러로 선택되고(갈색), 나머지 2개의 예비 컨트롤러가 있다고 가정합니다. 사육사는 더 이상 필요하지 않습니다! 관련 메타데이터 정보는 kafka 로그 형식(즉, 메시지 대기열 메시지 형식)으로 존재합니다.

위의 오른쪽 그림을 이해하고 나면 kafka 3.0 클러스터를 구축하기 전에 kafka 인스턴스의 역할을 잘 계획해야 한다는 것을 이해하는 것은 어렵지 않습니다. (브로커 4개 중 3개는 활성 구성을 통해 컨트롤러로 지정해야 하며 컨트롤러는 zk와 동일한 홀수 번호가 필요합니다.)

호스트 이름 아이피 역할 node.id
짐1 192.168.1.111 브로커, 컨트롤러 1
지무그2 192.168.1.112 브로커, 컨트롤러 2
짐3 192.168.1.113 브로커, 컨트롤러
지무그4 192.168.1.113 브로커 4

2. 준비물

  • kafka 사용자(새 kafka 사용자, 루트 사용자를 사용하지 않음) 아래에 kafka3 설치 디렉터리로 새 디렉터리를 만들고 wget을 사용하여 버전 3.10 설치 패키지를 다운로드합니다.
$mkdir kafka3-setup;
$ cd kafka3-setup/;
$ wget https://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.sh random-uuid
SzIhECn-QbCLzIuNxk1A2A

复制代码

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

 /home/kafka/kafka_2.13-3.1.0/bin/kafka-storage.sh format \
-t SzIhECn-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
#
#Tue Apr 12 07:39:07 CST 2022
node.id=1
version=1
cluster.id=SzIhECn-QbCLzIuNxk1A2A

复制代码

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

zimug1 zimug2 zimug3是三台应用服务器的主机名称(参考上文中的角色规划),在linux的/etc/hosts主机名与ip进行关系映射。将下面的命令集合保存为一个shell脚本,并赋予执行权限。执行该脚本即可启动kafka集群所有的节点,使用该脚本前提是:你已经实现了集群各节点之间的ssh免密登录。

#!/bin/bash
kafkaServers='zimug1 zimug2 zimug3'
#启动所有的kafka
for kafka in $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.properties 1>/dev/null 2>&1 &
EOF
echo 从节点 $kafka 启动kafka3.0...[ done ]
sleep 5
done

复制代码

설치 경로가 나와 다를 경우 /home/kafka/kafka_2.13-3.1.0자신의 상황에 맞게 수정해야 합니다.

5. 원클릭 중지 클러스터 스크립트

클릭 한 번으로 kafka 클러스터의 각 노드를 정지시키는 스크립트는 시작 스크립트의 사용법 및 원리와 동일합니다.

#!/bin/bash
kafkaServers='zimug1 zimug2 zimug3'
#停止所有的kafka
for kafka in $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 ]
sleep 5
done

复制代码

코드 텍스트는 쉽지 않습니다. 도움이 되셨다면 클릭하여 시청하거나 공유할 수 있도록 도와주세요. 여러분의 지원 없이는 제가 버틸 수 없을 수도 있습니다! 공식 계정인 Antetokounmpo에 오신 것을 환영합니다. 003에 회신하고 저자 칼럼 "Docker Cultivation"의 PDF 버전을 발표하십시오. 안테토쿤포 블로그 : zimug.com

추천

출처juejin.im/post/7133530591039782949