温馨提示×

kafka在centos如何扩容

小樊
32
2025-12-09 16:30:40
栏目: 智能运维

在 CentOS 上为 Kafka 扩容的实操指南

一 前置检查与准备

  • 版本与模式:生产建议 Kafka 3.4+(KRaft 模式)3.0+(ZooKeeper 模式)Java 11+;操作系统 CentOS 7.9+。单 Broker 或 副本因子=1 的集群先整改后再扩容。
  • 集群健康:所有 Broker 在线,Under-Replicated 分区=0,无异常告警;Consumer LAG 在业务容忍范围内。
  • 资源与窗口:新增 Broker 推荐规格 8C16G/500GB SSD(更优 16C32G/1TB NVMe);网络 ≥10Gbps;选择业务低峰维护窗口。
  • 容量评估:各 Broker 磁盘使用率、CPU/IO、网络带宽;确保新增节点后磁盘 剩余 > 50%(重平衡需要临时空间)。
  • 备份与权限:备份 ZooKeeper 数据(如使用 ZK);准备新增节点(同版本 Kafka、JVM、目录与权限)。

二 添加新 Broker 节点

  • 安装与目录(两台新节点示例):
    • 安装 Java:sudo yum install -y java-11-openjdk java-11-openjdk-devel
    • 下载解压 Kafka(与现网同版本,如 3.4.0):/opt/kafka_2.13-3.4.0.tgz
    • 创建用户与目录:sudo useradd -r -s /bin/false kafkamkdir -p /kafka-logschown -R kafka:kafka /opt/kafka /kafka-logs
  • 配置 server.properties(关键项,KRaft 与 ZK 二选一)
    • KRaft 模式(示例,新增节点 Broker ID 为 4
      • process.roles=broker,controller
      • controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093,4@192.168.1.14:9093
      • listeners=PLAINTEXT://192.168.1.14:9092,CONTROLLER://192.168.1.14:9093
      • advertised.listeners=PLAINTEXT://192.168.1.14:9092
      • listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      • inter.broker.listener.name=PLAINTEXT
      • log.dirs=/kafka-logs
      • broker.id=4
    • ZooKeeper 模式(示例)
      • broker.id=4
      • listeners=PLAINTEXT://192.168.1.14:9092
      • advertised.listeners=PLAINTEXT://192.168.1.14:9092
      • log.dirs=/kafka-logs
      • zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
  • 启动与纳管
    • 启动:/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
    • 验证加入:
      • KRaft:/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server 192.168.1.11:9092 | grep -E "^[0-9]+" | sort -u
      • ZK:/opt/kafka/bin/zookeeper-shell.sh zk1:2181 ls /brokers/ids(应含 4

三 分区再平衡与限流

  • 方式 A(推荐,按 Topic 列表生成计划)
    1. 生成待迁移 Topic 列表
      cat > topics-to-move.json <<EOF { "topics": [{"topic": "my-topic"}], "version": 1 } EOF
    2. 生成重分配计划(目标 Broker 含新增节点,如 4,5
      /opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.1.11:9092 \ --topics-to-move-json-file topics-to-move.json --broker-list "4,5" --generate
    3. 审核 JSON 计划(关注每个分区的 replicas 是否包含新 Broker,迁移数据量是否可接受)
    4. 执行迁移
      /opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.1.11:9092 \ --reassignment-json-file expand-cluster-reassignment.json --execute
    5. 监控进度与完成
      /opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.1.11:9092 \ --reassignment-json-file expand-cluster-reassignment.json --verify
  • 方式 B(全集群均衡,自动生成覆盖所有 Topic 的计划)
    • 生成:/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.1.11:9092 --generate --topics-to-move-json-file all-topics.json --broker-list "1,2,3,4,5"
    • 审核 JSON → 执行 → 验证(同上)
  • 限流与稳定性(避免影响业务)
    • 在 server.properties 设置迁移带宽(示例 5 MB/s):
      leader.replication.throttled.rate=5000000
      follower.replication.throttled.rate=5000000
    • 按 Topic/分区细化限流(在生成的 JSON 中设置 leader.replication.throttled.replicasfollower.replication.throttled.replicas
  • 时间预估:迁移时间(小时) ≈ 需迁移数据量(GB) / (迁移带宽(MB/s) * 3600) * 1.5
    示例:1TB 数据、带宽 100MB/s,预计约 4.2 小时

四 验证与收尾

  • 集群健康:
    • Under-Replicated 分区:/opt/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.1.11:9092 --describe --under-replicated-partitions(应无输出)
    • 分区分布均衡:/opt/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.1.11:9092 --describe --topic my-topic(各 Broker 的 Leader/副本分布大致均衡)
  • 业务影响:
    • 监控 Consumer Lag、生产/消费吞吐、CPU/网络/磁盘 IO;确认无异常抖动或超时
  • Leader 均衡(可选):
    • 自动:auto.leader.rebalance.enable=true(部分版本默认开启)
    • 手动:/opt/kafka/bin/kafka-leader-election.sh --bootstrap-server 192.168.1.11:9092 --election-type preferred --all-topic-partitions
  • 清理与基线:删除临时 JSON;更新监控基线(新增 Broker 指标);输出扩容报告(前后对比、影响与耗时)。

五 常见场景与排错要点

  • 新节点未分配到分区:确认 broker.id 唯一、监听地址可达、再分配计划中包含新 Broker ID、磁盘空间充足。
  • 迁移过慢或影响业务:启用/调高限流参数,分批迁移大 Topic,选择低峰时段,必要时临时扩容网络带宽。
  • 副本不同步或 Under-Replicated:检查网络抖动、磁盘 IO、目标磁盘剩余空间;必要时回滚未完成的分区迁移。
  • 版本与模式混用:确保新增节点与现网 Kafka 版本一致;KRaft 与 ZK 配置不可混用。
  • 客户端连接异常:核对 advertised.listeners 对外 IP/端口是否可达,避免内外网错配。

0