温馨提示×

如何通过Ubuntu配置Kafka集群

小樊
48
2025-11-15 16:09:51
栏目: 智能运维

在 Ubuntu 上配置 Kafka 集群

一 环境准备与规划

  • 准备至少 3 台 Ubuntu 服务器(示例主机名:kafka1、kafka2、kafka3;内网网段如 192.168.1.0/24),并配置 主机名解析DNS
  • 安装 Java 11(Kafka 3.x 推荐):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
  • 开放防火墙端口(如使用 firewalld):sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent && sudo firewall-cmd --reload(如还使用 9093 也一并开放)。
  • 规划目录:建议将 Kafka 安装至 /opt/kafka,日志目录 /var/lib/kafka/logs,并按节点设置唯一 broker.id
  • 选择部署模式:传统 Zookeeper 模式或 KRaft(Kafka Raft Metadata)模式。生产环境建议 KRaft,以减少外部依赖。

二 部署方案 KRaft 模式(推荐)

  • 下载并解压 Kafka(示例版本 3.6.2):
    wget https://downloads.apache.org/kafka/3.6.2/kafka_2.12-3.6.2.tgz
    tar -xzf kafka_2.12-3.6.2.tgz && sudo mv kafka_2.12-3.6.2 /opt/kafka
  • 生成集群 ID(在任一节点执行一次):
    /opt/kafka/bin/kafka-storage.sh random-uuid
  • 配置节点(/opt/kafka/config/kraft/server.properties,三台节点分别配置):
    • 唯一节点 ID:node.id=1(kafka2 用 2,kafka3 用 3
    • 控制器法定人数:controller.quorum.voters=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
    • 监听地址:listeners=PLAINTEXT://:9092,CONTROLLER://:9093
    • 对外地址:advertised.listeners=PLAINTEXT://<本机内网IP>:9092
    • 日志目录:log.dirs=/var/lib/kafka/logs
  • 格式化存储(三台节点均执行,使用同一集群 ID):
    /opt/kafka/bin/kafka-storage.sh format -t <上一步生成的UUID> -c /opt/kafka/config/kraft/server.properties
  • 启动服务(每台节点):
    sudo /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
  • 验证监听:ss -lntp | grep :9092 与 ss -lntp | grep :9093

三 部署方案 Zookeeper 模式(传统)

  • 安装并配置 Zookeeper 集群(至少 3 节点,示例使用 3.7.0):
    wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
    tar -xzf apache-zookeeper-3.7.0-bin.tar.gz && sudo mv apache-zookeeper-3.7.0 /opt/zookeeper
    编辑 /opt/zookeeper/conf/zoo.cfg:
    • dataDir=/var/lib/zookeeper
    • clientPort=2181
    • server.0=kafka1:2888:3888;server.1=kafka2:2888:3888;server.2=kafka3:2888:3888
      在每台节点的 dataDir 下创建 myid 文件,内容分别为 0、1、2
      启动:/opt/zookeeper/bin/zkServer.sh start
  • 安装并配置 Kafka(示例版本 3.6.2):
    wget https://downloads.apache.org/kafka/3.6.2/kafka_2.12-3.6.2.tgz
    tar -xzf kafka_2.12-3.6.2.tgz && sudo mv kafka_2.12-3.6.2 /opt/kafka
    编辑 /opt/kafka/config/server.properties(三台节点分别配置):
    • broker.id=0/1/2(唯一)
    • listeners=PLAINTEXT://:9092
    • advertised.listeners=PLAINTEXT://<本机内网IP>:9092
    • log.dirs=/var/lib/kafka/logs
    • zookeeper.connect=kafka1:2181,kafka2:2181,kafka3:2181
  • 启动 Kafka(每台节点):
    sudo /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

四 验证与常用运维命令

  • 创建测试主题(使用 KRaft 或 Zookeeper 的 bootstrap-server 参数):
    /opt/kafka/bin/kafka-topics.sh --create --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 \ –replication-factor 3 --partitions 1 --topic test-topic
  • 列出主题:
    /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server kafka1:9092
  • 生产消息:
    /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server kafka1:9092 --topic test-topic
  • 消费消息:
    /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test-topic --from-beginning
  • 查看主题详情(确认 Leader/Replicas/ISR):
    /opt/kafka/bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server kafka1:9092
  • 停止服务:
    • KRaft:/opt/kafka/bin/kafka-server-stop.sh
    • Zookeeper:/opt/zookeeper/bin/zkServer.sh stop

五 常见问题与优化建议

  • 监听与连通性:务必正确设置 listenersadvertised.listeners,客户端通过 advertised.listeners 连接;云服务器需使用 内网 IP弹性 IP 并确保安全组/防火墙放行 9092
  • 唯一性与目录:每个节点的 broker.id(KRaft 为 node.id) 必须唯一;更换 KRaft 集群时需清理 log.dirs 后再 format。
  • 高可用:副本因子建议 ≥ 3,分区数按吞吐与并行度规划;生产环境优先 KRaft 模式。
  • 监控与日志:配置 JMX 监控与日志轮转(log4j2),关注 UnderReplicatedPartitionsRequestHandlerAvgIdlePercent 等指标。

0