从零搭建生产级 Kafka 4.0 集群 ️: KRaft 模式部署与避坑指南

  • 2025-07-10 23:22:27
  • 494

Kafka 4.0 KRaft 模式的“秒级启动”,是不是很爽?但真正的考验现在才开始!今天,咱们就来点硬核的:亲手搭建一个三节点的、准生产级的 Kafka 4.0 KRaft 集群!

准备好了吗?系好安全带,发车!

准备工作:三台服务器

在生产环境中,高可用是基本要求。我们将搭建一个包含 3 个节点的集群,这样即使挂掉一台,服务依然坚挺。

服务器:3 台 Linux 服务器(虚拟机或物理机都行)kafka-1 (IP: 192.168.1.11)kafka-2 (IP: 192.168.1.12)kafka-3 (IP: 192.168.1.13)

软件:OpenJDK 11 或更高版本

Kafka 版本:当然是最新的 4.0.0!

运维避坑指南 #1 : 确保三台服务器之间网络互通,并且防火墙开放了 Kafka 需要的端口(默认是 9092 和 9093)。网络问题是集群搭建中最常见的“拦路虎”!

第一步:下载并解压 Kafka

在 所有三台服务器上 执行以下操作:

# 下载 Kafka 4.0.0wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz# 解压tar -xzf kafka_2.13-4.0.0.tgzcd kafka_2.13-4.0.0

第二步:生成集群 ID

KRaft 模式需要一个唯一的集群 ID。我们 只需要在一台服务器上 生成它,然后所有节点共用。

# 生成一个唯一的集群 IDKAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"echo "你的集群 ID 是: $KAFKA_CLUSTER_ID"

记下这个 ID,比如 rQ8aQ9z1Tj-mN9yZ_wXb0w,我们马上会用到。

第三步:配置server.properties(核心中的核心!)

这是最关键的一步!我们需要为 每个节点 创建独立的配置文件。进入 config/kraft/ 目录,这里有官方的模板。我们以 kafka-1 为例进行修改:

# 进入配置目录cd config/kraft/# 复制一份模板进行修改cp server.properties server-1.properties

打开 server-1.properties,修改以下核心配置:

# 【关键】节点角色:我们让每个节点都既是 broker 也是 controllerprocess.roles=broker,controller# 【关键】节点 ID,每个节点必须唯一!# kafka-1 设置为 1, kafka-2 设置为 2, 以此类推node.id=1# 【关键】Controller 投票节点列表# 把所有 Controller 节点的 node.id 和 IP:端口 都列出来controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093# 【关键】监听器配置# broker 监听来自客户端的连接,controller 监听内部 Raft 协议的连接listeners=PLAINTEXT://:9092,CONTROLLER://:9093# 【关键】广播给客户端的地址# 必须是客户端能访问到的地址!advertised.listeners=PLAINTEXT://192.168.1.11:9092# 日志存储目录,建议使用独立的高性能磁盘log.dirs=/var/lib/kafka/data

运维避坑指南 #2 : advertised.listeners 是新手的噩梦!如果你发现客户端连接不上,99% 是这里配错了。它必须是你的生产者/消费者能访问到的 IP 或域名。如果是云服务器,这里通常要配置成公网 IP。

为 kafka-2 和 kafka-3 创建 server-2.properties 和 server-3.properties,内容大部分相同,只需修改两处:

node.id 分别改为 2 和 3。

advertised.listeners 的 IP 分别改为 192.168.1.12 和 192.168.1.13。

第四步:格式化存储目录

在 所有三台服务器上,使用我们之前生成的集群 ID 来格式化存储目录。

在 kafka-1 上执行:

bin/kafka-storage.sh format -t <你的集群ID> -c config/kraft/server-1.properties

在 kafka-2 上执行:

bin/kafka-storage.sh format -t <你的集群ID> -c config/kraft/server-2.properties

在 kafka-3 上执行:

bin/kafka-storage.sh format -t <你的集群ID> -c config/kraft/server-3.properties

看到 Formatting ... 的日志就表示成功了。

第五步:启动集群

万事俱备,只欠东风!在 所有三台服务器上 启动 Kafka 服务。

在 kafka-1 上:

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

在 kafka-2 上:

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

在 kafka-3 上:

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

-daemon 参数让它在后台运行。

第六步:验证集群

怎么知道我们的集群是不是成功了?创建一个 Topic 试试!

在 任意一台 Kafka 服务器上执行:

# 创建一个名为 "hello-kraft" 的 Topic,3个分区,3个副本bin/kafka-topics.sh --create \ --topic hello-kraft \ --bootstrap-server 192.168.1.11:9092 \ --partitions 3 \ --replication-factor 3# 查看 Topic 详情bin/kafka-topics.sh --describe \ --topic hello-kraft \ --bootstrap-server 192.168.1.11:9092

如果你能看到 Topic 的分区信息,并且 Leader 和 Replicas 分布在不同的节点上,那么恭喜你! 你的第一个生产级 Kafka 4.0 KRaft 集群已经成功上线!