温馨提示×

Kafka在Debian上的集群搭建方法

小樊
43
2026-01-08 14:43:13
栏目: 智能运维

在 Debian 上搭建高可用 Kafka 集群

一 架构与准备

  • 建议准备至少3 台 Debian 主机,规划如下(示例主机名与 IP):
    • kafka-1 / 192.168.10.11
    • kafka-2 / 192.168.10.12
    • kafka-3 / 192.168.10.13
  • 安装 Java 17(Kafka 4.x 推荐):sudo apt update && sudo apt install -y openjdk-17-jdk
  • 创建专用用户与目录(所有节点):
    • sudo useradd -m -s /bin/bash kafka
    • sudo mkdir -p /opt/kafka /data/kafka-logs /data/kafka-meta
    • sudo chown -R kafka:kafka /opt/kafka /data/kafka-logs /data/kafka-meta
  • 说明:Kafka 4.x 默认采用 KRaft 模式(无 ZooKeeper);若使用旧版本(如 2.x/3.x),需额外部署 ZooKeeper 集群

二 部署方式一 KRaft 模式(Kafka 4.x 推荐)

  • 下载并分发二进制包(在其中一台执行,然后拷贝到其它节点):
    • cd /opt && curl -O https://downloads.apache.org/kafka/4.1.1/kafka_2.13-4.1.1.tgz
    • tar -xzf kafka_2.13-4.1.1.tgz && ln -s kafka_2.13-4.1.1 kafka
    • chown -R kafka:kafka /opt/kafka*
    • 使用 scp -r 将解压目录分发到 kafka-2 / kafka-3,并创建软链 /opt/kafka
  • 生成集群 ID(仅在一个节点执行一次):
    • su - kafka -c "cd /opt/kafka && bin/kafka-storage.sh random-uuid"
    • 记录生成的 UUID,后续三台节点均使用相同 ID
  • 配置 server.properties(三台节点分别配置,注意区分 node.id 与监听地址)
    • 公共部分(示例,三台一致):
      process.roles=broker,controller
      controller.quorum.voters=1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093
      controller.listener.names=CONTROLLER
      
      listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
      inter.broker.listener.name=PLAINTEXT
      
      log.dirs=/data/kafka-logs
      
    • 节点专属(示例):
      • kafka-1:node.id=1advertised.listeners=PLAINTEXT://192.168.10.11:9092
      • kafka-2:node.id=2advertised.listeners=PLAINTEXT://192.168.10.12:9092
      • kafka-3:node.id=3advertised.listeners=PLAINTEXT://192.168.10.13:9092
  • 格式化存储并启动(三台节点分别执行):
    • su - kafka -c "cd /opt/kafka && bin/kafka-storage.sh format -t <ClusterID> -c config/kraft/server.properties"
    • su - kafka -c "cd /opt/kafka && bin/kafka-server-start.sh -daemon config/kraft/server.properties"
  • 验证进程与端口:ss -lntp | grep -E ':(9092|9093)',应看到 9092/9093 处于监听状态。

三 部署方式二 ZooKeeper 模式(Kafka 2.x/3.x)

  • 部署 ZooKeeper 集群(3 节点,示例):
    • 下载解压并编辑 conf/zoo.cfg
      tickTime=2000
      initLimit=5
      syncLimit=2
      dataDir=/var/lib/zookeeper
      clientPort=2181
      server.1=zk1:2888:3888
      server.2=zk2:2888:3888
      server.3=zk3:2888:3888
      
    • 在每台 ZooKeeper 节点的 dataDir 下创建文件 myid,内容分别为 1/2/3
    • 启动并检查:bin/zkServer.sh startbin/zkServer.sh status
  • 部署 Kafka Broker(3 节点,示例):
    • 下载解压 Kafka(如 3.5.2),编辑 config/server.properties
      broker.id=<唯一ID: 0/1/2>
      listeners=PLAINTEXT://0.0.0.0:9092
      advertised.listeners=PLAINTEXT://<本机IP>:9092
      log.dirs=/var/lib/kafka/logs
      zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
      
    • 启动:bin/kafka-server-start.sh -daemon config/server.properties
  • 验证:ss -lntp | grep 9092;创建测试 Topic:
    • bin/kafka-topics.sh --create --topic test --partitions 3 --replication-factor 3 --zookeeper zk1:2181

四 验证与常用运维命令

  • 查看集群元数据与 Topic 列表(KRaft 使用 --bootstrap-server;ZooKeeper 使用 --zookeeper):
    • KRaft:bin/kafka-topics.sh --bootstrap-server 192.168.10.11:9092 --list
    • ZooKeeper:bin/kafka-topics.sh --zookeeper zk1:2181 --list
  • 查看 Topic 详情(示例):
    • KRaft:bin/kafka-topics.sh --bootstrap-server 192.168.10.11:9092 --describe --topic test
    • ZooKeeper:bin/kafka-topics.sh --zookeeper zk1:2181 --describe --topic test
  • 生产/消费测试(KRaft 示例):
    • 生产:bin/kafka-console-producer.sh --bootstrap-server 192.168.10.11:9092 --topic test
    • 消费:bin/kafka-console-consumer.sh --bootstrap-server 192.168.10.11:9092 --topic test --from-beginning
  • 常用运维要点:
    • 配置 replication.factor ≥ 3min.insync.replicas=2,提升可用性
    • 按磁盘与负载规划 log.dirs(多盘可配置多个目录)
    • 生产环境建议启用 JMX 并结合 Prometheus/Grafana 做监控与告警。

0