温馨提示×

如何快速搭建Linux Kafka集群

小樊
40
2026-01-09 12:55:43
栏目: 智能运维

快速搭建 Linux Kafka 集群

一、方案选择与准备

  • 推荐选择 Kafka 4.0+ KRaft 模式(无需 ZooKeeper,部署更简洁)。准备 3 台 Linux 主机(物理机/虚拟机/云主机均可),并安装 Java 17+。示例以 Ubuntu 演示,其他发行版命令类似。KRaft 下需为集群生成 Cluster ID 并初始化存储目录。若使用旧版本(如 3.x),需额外部署 ZooKeeper 集群

二、3 节点 KRaft 集群搭建步骤

  • 1)安装 Java
    • Ubuntu/Debian:
      • sudo apt update && sudo apt install -y openjdk-17-jdk
      • java -version
  • 2)下载并解压 Kafka
    • 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
  • 3)生成 Cluster ID(只需一次,三台节点用同一个 ID)
    • ./bin/kafka-storage.sh random-uuid
  • 4)为每台节点准备配置文件(示例为 node1/node2/node3)
    • 建议将 config/kraft/server.properties 复制为 server-node{1,2,3}.properties,并修改以下关键项:
      • process.roles=broker,controller
      • node.id=1(每台唯一:1/2/3)
      • controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
      • listeners=PLAINTEXT://:9092,CONTROLLER://:9093
      • advertised.listeners=PLAINTEXT://<本机可访问IP或主机名>:9092
      • log.dirs=/data/kafka-logs-node
  • 5)格式化存储目录(三台节点均执行,使用同一 Cluster ID)
    • ./bin/kafka-storage.sh format -t -c ./server-node1.properties
    • ./bin/kafka-storage.sh format -t -c ./server-node2.properties
    • ./bin/kafka-storage.sh format -t -c ./server-node3.properties
  • 6)启动服务(每台节点)
    • ./bin/kafka-server-start.sh ./server-node.properties
  • 7)验证
    • 创建复制因子为 3 的主题(任一节点执行):
      • ./bin/kafka-topics.sh --create --topic replicated-topic --bootstrap-server node1:9092 --partitions 1 --replication-factor 3
    • 查看分区与副本分配:
      • ./bin/kafka-topics.sh --describe --topic replicated-topic --bootstrap-server node1:9092
    • 生产与消费测试:
      • ./bin/kafka-console-producer.sh --topic replicated-topic --bootstrap-server node1:9092
      • ./bin/kafka-console-consumer.sh --topic replicated-topic --from-beginning --bootstrap-server node1:9092

三、旧版本 3.x 使用 ZooKeeper 的极速部署

  • 1)准备 3 节点 ZooKeeper 集群(clientPort=2181,server.x=host:2888:3888,各自 dataDir 下放置 myid=1/2/3)。
  • 2)下载解压 Kafka 3.x(如 3.6.0),在每台 Broker 的 config/server.properties 中设置:
    • broker.id=<唯一ID>
    • listeners=PLAINTEXT://0.0.0.0:9092
    • advertised.listeners=PLAINTEXT://<本机IP>:9092
    • log.dirs=/var/lib/kafka
    • zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
  • 3)启动 ZooKeeper 集群(每台):
    • nohup bin/zookeeper-server-start.sh config/zookeeper.properties > zk.log 2>&1 &
  • 4)启动 Kafka 集群(每台):
    • bin/kafka-server-start.sh config/server.properties
  • 5)验证(旧版常用 --zookeeper;新版也可用 --bootstrap-server):
    • bin/kafka-topics.sh --create --zookeeper zk1:2181,zk2:2181,zk3:2181 --replication-factor 3 --partitions 1 --topic test
    • bin/kafka-topics.sh --describe --zookeeper zk1:2181 --topic test
    • 生产/消费测试同上。

四、关键配置与常见问题

  • 关键配置要点
    • KRaft 模式核心参数:process.roles、node.id(集群唯一)、controller.quorum.voters(控制器法定人数,三节点通常为 1@h1:9093,2@h2:9093,3@h3:9093)、listeners/advertised.listeners(对外可达地址)、log.dirs(多盘可逗号分隔)。生产建议将 controller 与 broker 角色分离 部署以提升稳定性与性能。
  • 常见故障排查
    • advertised.listeners 配置错误导致客户端无法连接(请填写其他节点与客户端可访问的 IP/主机名)。
    • 防火墙未放行 9092/9093,导致节点间或客户端无法通信(开放相应端口或临时关闭防火墙测试)。
    • 复制因子不能大于 Broker 数量;创建测试主题时按实际 Broker 数设置 replication.factor。
    • 新集群首次启动前未执行 kafka-storage.sh format(KRaft 必需步骤)。

0