我们来详细讲解如何在 Linux 系统上从头开始安装和搭建一个 Apache Kafka 4.0(采用 KRaft 模式)的集群。
本指南将以单个节点(单机) 为例进行演示,并说明如何扩展到多节点集群。Kafka 4.0 完全移除了对 ZooKeeper 的依赖,因此我们只需要配置 KRaft。
前提条件
- 操作系统:Linux(推荐)、macOS 或 WSL2(Windows Subsystem for Linux)。本例使用 Ubuntu。
- Java:安装 Java 17 或更高版本(Kafka 4.0+ 要求)。
sudo apt update sudo apt install openjdk-17-jdk java -version # 验证安装 - 下载 Kafka:从官方地址下载 Kafka 4.0+ 二进制包。
wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz tar -xzf kafka_2.13-4.0.0.tgz cd kafka_2.13-4.0.0
第一部分:单节点(Single Node)部署
这种方式适合开发、测试和学习。
步骤 1:生成集群唯一标识符(Cluster ID)
KRaft 要求集群有一个唯一的 ID。
./bin/kafka-storage.sh random-uuid
# 输出类似:rL9qXWbbQe-0rQ6aNsQmIw
# 复制这个 UUID,下一步会用到。
步骤 2:格式化存储目录(Log Directories)
使用上一步生成的 UUID 来初始化存储元数据的日志目录。
./bin/kafka-storage.sh format -t <uuid> -c ./config/kraft/server.properties
# 例如:
./bin/kafka-storage.sh format -t rL9qXWbbQe-0rQ6aNsQmIw -c ./config/kraft/server.properties
输出 Formatting ... 即表示成功。这是一个关键步骤,每个新集群只需执行一次。
步骤 3:修改配置文件
编辑 KRaft 配置文件 config/kraft/server.properties。以下是需要关注的关键配置:
# 节点的角色。这是一个同时充当 Controller 和 Broker 的节点。
process.roles=broker,controller
# 节点的唯一 ID。确保集群内每个节点 ID 唯一。
node.id=1
# Controller 节点的列表。所有 Controller 节点(包括自己)都要列在这里。
controller.quorum.voters=1@localhost:9093
# 对内和对外的监听器。PLAINTEXT 表示不加密。
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://localhost:9092
# 日志数据存储的目录
log.dirs=/tmp/kraft-combined-logs
# 如果你有多个网卡,或者需要指定绑定IP,可以设置如下(通常不需要)
# controller.listener.names=CONTROLLER
# inter.broker.listener.name=PLAINTEXT
说明:
controller.quorum.voters:格式为nodeid@host:port。多个节点用逗号分隔,例如1@node1:9093,2@node2:9093,3@node3:9093。listeners:PLAINTEXT://:9092用于 Broker 通信(客户端连接),CONTROLLER://:9093用于 Controller 节点间的 Raft 协议通信。
步骤 4:启动 Kafka 服务器
使用修改后的配置文件启动服务。
./bin/kafka-server-start.sh ./config/kraft/server.properties
如果启动成功,你将看到大量日志输出,最后包含 [KafkaRaftServer nodeId=1] Started 的字样。
步骤 5:测试验证
1. 创建一个 Topic
打开另一个终端,执行:
./bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
2. 生产一些消息
./bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
> Hello Kafka 4.0!
> This is KRaft mode.
3. 消费这些消息
./bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
如果能看到刚才输入的消息,恭喜你!单机版的 Kafka 4.0 KRaft 集群已经搭建成功。
停止服务器:在服务器终端按 Ctrl+C。
第二部分:多节点(集群)部署
要搭建一个包含 3 个节点(node1, node2, node3)的集群,步骤如下:
步骤 1:准备多个节点
在三台物理机、虚拟机或 Docker 容器上,重复前提条件中的步骤(下载 Kafka,安装 Java)。
步骤 2:为每个节点创建配置文件
复制三份 config/kraft/server.properties,例如:
server-node1.propertiesserver-node2.propertiesserver-node3.properties
修改 server-node1.properties:
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://node1:9092
log.dirs=/tmp/kraft-logs-node1
修改 server-node2.properties:
process.roles=broker,controller
node.id=2
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://node2:9092
log.dirs=/tmp/kraft-logs-node2
修改 server-node3.properties:
process.roles=broker,controller
node.id=3
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://node3:9092
log.dirs=/tmp/kraft-logs-node3
关键点:
node.id必须唯一。controller.quorum.voters列表必须完全相同。advertised.listeners必须设置为其他节点和客户端能够访问的主机名或 IP。
步骤 3:初始化并启动每个节点
在每个节点上,执行以下操作:
- 使用同一个 Cluster ID 格式化日志目录(第一步生成的同一个 UUID)。
./bin/kafka-storage.sh format -t rL9qXWbbQe-0rQ6aNsQmIw -c ./server-node1.properties # 在 node1 上 ./bin/kafka-storage.sh format -t rL9qXWbbQe-0rQ6aNsQmIw -c ./server-node2.properties # 在 node2 上 ./bin/kafka-storage.sh format -t rL9qXWbbQe-0rQ6aNsQmIw -c ./server-node3.properties # 在 node3 上 - 启动服务。
./bin/kafka-server-start.sh ./server-node1.properties # 在 node1 上 ./bin/kafka-server-start.sh ./server-node2.properties # 在 node2 上 ./bin/kafka-server-start.sh ./server-node3.properties # 在 node3 上
步骤 4:测试集群
任意连接到一个节点(如 node1)创建 Topic,并指定副本数为 3(与 Broker 数量一致)。
./bin/kafka-topics.sh --create --topic replicated-topic --bootstrap-server node1:9092 --partitions 1 --replication-factor 3
查看 Topic 的描述信息,检查副本分配和领导者状态。
./bin/kafka-topics.sh --describe --topic replicated-topic --bootstrap-server node1:9092
输出应显示该 Topic 的 Leader 和 ISR(同步副本列表),证明集群在正常工作。
注意事项与最佳实践
-
生产环境:
- 分离角色:在生产环境中,建议将
controller角色和broker角色部署在不同的节点上,以提高稳定性和性能。例如,让 3 个节点专做 Controller,其他节点专做 Broker。 - 配置文件:
config/kraft/目录下的server.properties是一个模板,生产环境需要仔细调整其他参数,如socket设置、JVM 堆内存、监控指标等。 - 安全:配置
SASL_SSL或SSL监听器,而不是PLAINTEXT。
- 分离角色:在生产环境中,建议将
-
故障排查:
- 首先检查日志文件(默认输出到控制台,生产环境应配置为输出到文件)。
- 确保防火墙开放了相关端口(如
9092,9093)。 - 确保
advertised.listeners配置正确,客户端能够访问。
通过以上步骤,你应该能够成功搭建并运行一个 Apache Kafka 4.0 的 KRaft 集群。

被折叠的 条评论
为什么被折叠?



