Skip to content

Kafka-Kraft 模式

1. Kafka-Kraft 架构

Alt text 如图所示,左图为Kafka现有架构,元数据在Zookeeper中,运行时动态选举Controller,由Controller 进行Kafka集群管理。右图为kraft模式架构,自Kafka在2.8版本加入该特性,Kafka3.3.1版本标记为生产稳定。不再依赖Zookeeper集群,而是用三台Controller节点代替Zookeeper,元数据保存在Controller 中,由Controller直接进行Kafka集群管理。
这样做的好处有以下几个:

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

2. Kafka-Kraft集群部署

  1. 修改/opt/module/kafka-3.6.1/config/kraft/server.properties 配置文件
sh
[jack@hadoop105 kraft]$ vi server.properties
#kafka 的角色(controller相当于主机、broker节点相当于从机,主机类似zk功能)
process.roles=broker, controller
#节点 ID
node.id=2
#全 Controller 列表
controller.quorum.voters=1@hadoop105:9093,2@hadoop106:9093,3@hadoop107:9093
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://hadoop105:9092
  1. 分发配置
sh
[jack@hadoop105 kraft]$ scp server.properties jack@hadoop106:/opt/module/kafka-3.6.1/config/kraft/
server.properties                                                                                                               100% 6338     1.6MB/s   00:00    
[jack@hadoop105 kraft]$ scp server.properties jack@hadoop107:/opt/module/kafka-3.6.1/config/kraft/
server.properties

分发完毕后需要在hadoop106和hadoop107上对node.id相应改变 ,值需要和controller.quorum.voters对应。修改相应的advertised.Listeners地址。 3. 初始化集群数据目录

sh
# 生成存储目录唯一 ID
[jack@hadoop105 kafka-3.6.1]$ bin/kafka-storage.sh random-uuid
8944kaw8QzGJerNcc6gfJg
# 用该ID格式化Kafka存储目录(三台节点)
[jack@hadoop105 kafka-3.6.1]$ bin/kafka-storage.sh format -t 8944kaw8QzGJerNcc6gfJg -c /opt/module/kafka-3.6.1/config/kraft/server.properties
Formatting /opt/module/kafka-3.6.1/data/ with metadata.version 3.6-IV2.
[jack@hadoop106 kafka-3.6.1]$ bin/kafka-storage.sh format -t 8944kaw8QzGJerNcc6gfJg -c /opt/module/kafka-3.6.1/config/kraft/server.properties
Formatting /opt/module/kafka-3.6.1/data/ with metadata.version 3.6-IV2.
[jack@hadoop107 kafka-3.6.1]$ bin/kafka-storage.sh format -t 8944kaw8QzGJerNcc6gfJg -c /opt/module/kafka-3.6.1/config/kraft/server.properties
Formatting /opt/module/kafka-3.6.1/data/ with metadata.version 3.6-IV2.
  1. 启动Kafka集群
sh
[jack@hadoop105 kafka-3.6.1]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties
[jack@hadoop105 kafka-3.6.1]$ jps
16499 KafkaEagle
57797 QuorumPeerMain
52728 Kafka
52831 Jps
[jack@hadoop106 kafka-3.6.1]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties
[jack@hadoop106 kafka-3.6.1]$ jps
17112 Kafka
17229 Jps
[jack@hadoop107 kafka-3.6.1]$ bin/kafka-server-start.sh -daemon config/kraft/server.properties
[jack@hadoop107 kafka-3.6.1]$ jps
22088 Kafka
22217 Jps

3. Kafka-Kraft集群启动停止脚本

在/home/jack/bin目录下创建文件kafka-kraft脚本文件

sh
[jack@hadoop105 bin]$ vi kafka-kraft

脚本如下:

sh
#! /bin/bash
case $1 in
"start"){
 for i in hadoop105 hadoop106 hadoop107
 do
 echo " --------启动 $i kafka-------"
 ssh $i "/opt/module/kafka-3.6.1/bin/kafka-server-start.sh -daemon /opt/module/kafka-3.6.1/config/kraft/server.properties"
 done
};;
"stop"){
 for i in hadoop105 hadoop106 hadoop107
 do
 echo " --------停止 $i Kafka-------"
 ssh $i "/opt/module/kafka-3.6.1/bin/kafka-server-stop.sh "
 done
};;
esac
  1. 添加执行权限
sh
[jack@hadoop105 bin]$ chmod +x kafka-kraft.sh
  1. 启动集群命令
sh
[jack@hadoop105 bin]$ kafka-kraft start
 --------启动 hadoop105 kafka-------
 --------启动 hadoop106 kafka-------
 --------启动 hadoop107 kafka-------
  1. 停止集群命令
sh
[jack@hadoop105 bin]$ kafka-kraft stop
 --------停止 hadoop105 Kafka-------
 --------停止 hadoop106 Kafka-------
 --------停止 hadoop107 Kafka-------