Kafka 4.0安装搭建

我们来详细讲解如何在 Linux 系统上从头开始安装和搭建一个 Apache Kafka 4.0(采用 KRaft 模式)的集群。

本指南将以单个节点(单机) 为例进行演示,并说明如何扩展到多节点集群。Kafka 4.0 完全移除了对 ZooKeeper 的依赖,因此我们只需要配置 KRaft。


前提条件

  1. 操作系统:Linux(推荐)、macOS 或 WSL2(Windows Subsystem for Linux)。本例使用 Ubuntu。
  2. Java:安装 Java 17 或更高版本(Kafka 4.0+ 要求)。
    sudo apt update
    sudo apt install openjdk-17-jdk
    java -version # 验证安装
    
  3. 下载 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
  • listenersPLAINTEXT://: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.properties
  • server-node2.properties
  • server-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:初始化并启动每个节点

在每个节点上,执行以下操作:

  1. 使用同一个 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 上
    
  2. 启动服务
    ./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(同步副本列表),证明集群在正常工作。


注意事项与最佳实践

  1. 生产环境

    • 分离角色:在生产环境中,建议将 controller 角色和 broker 角色部署在不同的节点上,以提高稳定性和性能。例如,让 3 个节点专做 Controller,其他节点专做 Broker。
    • 配置文件config/kraft/ 目录下的 server.properties 是一个模板,生产环境需要仔细调整其他参数,如 socket 设置、JVM 堆内存、监控指标等。
    • 安全:配置 SASL_SSLSSL 监听器,而不是 PLAINTEXT
  2. 故障排查

    • 首先检查日志文件(默认输出到控制台,生产环境应配置为输出到文件)。
    • 确保防火墙开放了相关端口(如 9092, 9093)。
    • 确保 advertised.listeners 配置正确,客户端能够访问。

通过以上步骤,你应该能够成功搭建并运行一个 Apache Kafka 4.0 的 KRaft 集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值