搭建KRaft模式下的Kafka集群

1,060 阅读2分钟

本文简单介绍在一台Centos上搭建KRaft模式的Kafka集群,不需要zookeeper

前提需要下载好kafka,本文基于kafka3.6

以下全部命令在下图中的目录执行

image.png

修改配置文件server.properties

config/kraft目录下有server.properties 配置文件,复制三份

分别修改三份配置文件

server-1.properties

node.id=1
controller.quorum.voters=1@localhost:19093,2@localhost:19094,3@localhost:19095
listeners=PLAINTEXT://:9093,CONTROLLER://:19093
advertised.listeners=PLAINTEXT://localhost:9093
log.dirs=/tmp/kraft-combined-logs-1

server-2.properties

node.id=2
controller.quorum.voters=1@localhost:19093,2@localhost:19094,3@localhost:19095
listeners=PLAINTEXT://:9094,CONTROLLER://:19094
advertised.listeners=PLAINTEXT://localhost:9094
log.dirs=/tmp/kraft-combined-logs-2

server-3.properties

node.id=3
controller.quorum.voters=1@localhost:19093,2@localhost:19094,3@localhost:19095
listeners=PLAINTEXT://:9095,CONTROLLER://:19095
advertised.listeners=PLAINTEXT://localhost:9095
log.dirs=/tmp/kraft-combined-logs-3

在KRaft模式下的Kafka集群的server.properties文件中,portlistenersadvertised.listeners的含义分别是:

  • port:这个参数在KRaft模式下的Kafka集群的配置文件中并没有明确的定义。在ZooKeeper模式下,port参数用于设置Kafka broker监听客户端连接的端口。但在KRaft模式下,这个参数可能已经被listeners参数取代。

  • listeners:这个参数用于设置Kafka broker监听的地址和端口。这个参数的格式通常为listener_name://host_name:port。例如,listeners=PLAINTEXT://:9092,CONTROLLER://:9093表示broker在9092端口上以明文形式监听客户端的连接,同时在9093端口上监听控制器的连接。

  • advertised.listeners:这个参数用于设置Kafka broker对外广播的地址。这个地址是Kafka broker告诉客户端的,客户端将通过这个地址来连接到Kafka broker。例如,advertised.listeners=PLAINTEXT://localhost:9092表示Kafka broker将自己的地址广播为localhost:9092。之后创建topic等操作用的就是这个端口。

格式化存储目录

生成集群的唯一ID

./bin/kafka-storage.sh random-uuid
命令会生成一个唯一ID
例如下图里的Fd0AWRQsQgGBT2HdIPcnSw
记住这个ID

image.png 格式化存储目录

每个机器都要执行
./bin/kafka-storage.sh format -t Fd0AWRQsQgGBT2HdIPcnSw -c ./config/kraft/server-1.properties
./bin/kafka-storage.sh format -t Fd0AWRQsQgGBT2HdIPcnSw -c ./config/kraft/server-2.properties
./bin/kafka-storage.sh format -t Fd0AWRQsQgGBT2HdIPcnSw -c ./config/kraft/server-3.properties
可以查看执行的结果
cat /tmp/kraft-combined-logs-1/meta.properties

tmp目录下会生成 3 个文件夹,这个路径是之前在server.properties里配置的 image.png image.png

启动Kafka集群

./bin/kafka-server-start.sh ./config/kraft/server-1.properties
./bin/kafka-server-start.sh ./config/kraft/server-2.properties
./bin/kafka-server-start.sh ./config/kraft/server-3.properties

image.png

从启动过程中打印的日志来看,启动的节点会进行领导者选举,不断与其他节点取得联系。

测试

在9093的机器上创建Topic:
./bin/kafka-topics.sh --bootstrap-server ip:port --create --topic topicName --partitions 1 --replication-factor 3
这个命令会创建一个名为topicName的topic,有1个分区,每个分区需分配3个副本

在9094的机器上查询Topic列表
./bin/kafka-topics.sh --bootstrap-server localhost:9094 --list

在9095的机器上查询单个Topic信息
./bin/kafka-topics.sh --bootstrap-server localhost:9095 --describe --topic autumn

image.png

验证完成,集群搭建完毕