Skip to content

Latest commit

 

History

History
225 lines (160 loc) · 6.16 KB

16、Kafka-Kraft模式的安装与部署.md

File metadata and controls

225 lines (160 loc) · 6.16 KB

一、什么是Kraft模式

如上图所示,左侧的图片是Kafka现有架构,元数据存储在zookeeper中,运行时动态选举controller,由Controller进行Kafka集群管理。右图是Kraft模式(目前仍在实验性阶段),不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在zookeeper中,由controller直接进行kafka集群管理。

这样做是由很多好处的:

  • Kafka不再依赖外部框架,就能独立运行
  • controller管理集群,不再需要从zookeeper中先读取数据,集群性能会提高
  • 由于不依赖zookeeper,集群扩展时不再受到zookeeper读写能力限制
  • controller不再动态选举,而是由配置文件规定。这样就可以有针对性地加强controller节点地配置,而不是像以前一样对随机controller节点地高负载束手无策

二、Kafka-Kraft集群部署

在开始集群先关掉kafka:

[wzq@hadoop102 ~]$ kf.sh stop
[wzq@hadoop102 ~]$ zk.sh stop
[wzq@hadoop102 ~]$ jpsall
=============== hadoop102 ===============
5395 Jps
=============== hadoop103 ===============
5484 Jps
=============== hadoop104 ===============
5515 Jps

新解压一份kafka:

[wzq@hadoop102 ~]$ cd /opt/software/
[wzq@hadoop102 software]$ ll | grep kafka
-rw-r--r--. 1 wzq wzq  86486610 3月  31 19:11 kafka_2.12-3.0.0.tgz
drwxrwxr-x. 2 wzq wzq        39 10月 13 00:00 kafka-eagle-bin-2.0.8
-rw-r--r--. 1 wzq wzq  81074069 2月   9 15:23 kafka-eagle-bin-2.0.8.tar.gz
[wzq@hadoop102 software]$ tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/

为新解压的kafka更名:

[wzq@hadoop102 software]$ cd /opt/module/
[wzq@hadoop102 module]$ ll | grep kafka
drwxr-xr-x.  7 wzq wzq  105 9月   9 2021 kafka_2.12-3.0.0
drwxr-xr-x.  9 wzq wzq  196 4月   2 23:06 kafka-3.0.0
[wzq@hadoop102 module]$ mv kafka_2.12-3.0.0/ kafka-kraft

进入到这个目录,然后修改kraft对应的配置文件:

[wzq@hadoop102 kafka-kraft]$ vim config/kraft/server.properties

修改以下内容:

# node.id全局位唯一,这里配置hadoop102为2,hadoop103为3,hadoop104为4
node.id=2

# 配置controller选举,把三台主机都写上,注意前面的234对应node.id
controller.quorum.voters=2@hadoop102:9093,3@hadoop103:9093,4@hadoop104:9093

# 对外暴露的端口号,这里修改localhost为当前主机名
advertised.listeners=PLAINTEXT://hadoop102:9092

# 修改日志存储位置
log.dirs=/opt/module/kafka-kraft/data

分发:

[wzq@hadoop102 module]$ xsync kafka-kraft/

分发完毕之后,到hadoop103和104修改配置的node.id和对外暴露的地址:

[wzq@hadoop103 ~]$ cd /opt/module/kafka-kraft/
[wzq@hadoop103 kafka-kraft]$ vim config/kraft/server.properties
# 在Hadoop103修改这个
node.id=3
advertised.listeners=PLAINTEXT://hadoop103:9092

# 同理在Hadoop104也修改一下
[wzq@hadoop104 ~]$ cd /opt/module/kafka-kraft/
[wzq@hadoop104 kafka-kraft]$ vim config/kraft/server.properties
node.id=4
advertised.listeners=PLAINTEXT://hadoop104:9092

改完之后就可以启动集群了,回到Hadoop102主机,首先进行初始化

先生产一个UUID,存储目录的唯一id:

[wzq@hadoop102 kafka-kraft]$ bin/kafka-storage.sh random-uuid
zECZhe_CRP2bEYnCYX6O_w

用该UUID格式化kafka存储目录,在三台节点上都要初始化一下:

[wzq@hadoop102 kafka-kraft]$ bin/kafka-storage.sh format -t zECZhe_CRP2bEYnCYX6O_w -c /opt/module/kafka-kraft/config/kraft/server.properties
[wzq@hadoop103 kafka-kraft]$ bin/kafka-storage.sh format -t zECZhe_CRP2bEYnCYX6O_w -c /opt/module/kafka-kraft/config/kraft/server.properties
[wzq@hadoop104 kafka-kraft]$ bin/kafka-storage.sh format -t zECZhe_CRP2bEYnCYX6O_w -c /opt/module/kafka-kraft/config/kraft/server.properties

然后就可以启动kafka了:

[wzq@hadoop102 kafka-kraft]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties
[wzq@hadoop103 kafka-kraft]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties
[wzq@hadoop104 kafka-kraft]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties

停止Kafka:

[wzq@hadoop102 kafka-kraft]$ bin/kafka-server-stop.sh
[wzq@hadoop103 kafka-kraft]$ bin/kafka-server-stop.sh
[wzq@hadoop104 kafka-kraft]$ bin/kafka-server-stop.sh

ok,这样就算部署成功啦

三、编写kafka-kraft启停脚本

为了方便同意启动停止kafka-kraft,可以编写一个脚本:

来到家目录,新建一个shell脚本:

[wzq@hadoop102 bin]$ pwd
/home/wzq/bin
[wzq@hadoop102 bin]$ vim kf2.sh

填入以下内容:

#! /bin/bash

case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "---------启动 $i Kafka-Kraft---------"
		ssh $i "/opt/module/kafka-kraft/bin/kafka-server-start.sh -daemon /opt/module/kafka-kraft/config/kraft/server.properties"
	done
};;
"stop"){
        for i in hadoop102 hadoop103 hadoop104
        do
                echo "---------停止 $i Kafka-Kraft---------"
                ssh $i "/opt/module/kafka-kraft/bin/kafka-server-stop.sh"
        done
};;
esac

使该文件具有可执行权限:

[wzq@hadoop102 bin]$ chmod +x kf2.sh

测试一下:

# 启动
[wzq@hadoop102 bin]$ kf2.sh start
---------启动 hadoop102 Kafka-Kraft---------
---------启动 hadoop103 Kafka-Kraft---------
---------启动 hadoop104 Kafka-Kraft---------
[wzq@hadoop102 bin]$ jpsall
=============== hadoop102 ===============
7321 Kafka
7401 Jps
=============== hadoop103 ===============
7079 Jps
7003 Kafka
=============== hadoop104 ===============
7108 Jps
7032 Kafka

# 停止,停止的过程有点慢,稍微等一下再看j
[wzq@hadoop102 bin]$ kf2.sh stop
---------停止 hadoop102 Kafka-Kraft---------
---------停止 hadoop103 Kafka-Kraft---------
---------停止 hadoop104 Kafka-Kraft---------
[wzq@hadoop102 bin]$ jpsall
=============== hadoop102 ===============
7494 Jps
=============== hadoop103 ===============
7173 Jps
=============== hadoop104 ===============
7201 Jps

参考资料