温馨提示×

CentOS Kafka集群如何进行扩容

小樊
45
2025-12-07 16:46:26
栏目: 智能运维

CentOS Kafka 集群扩容实操指南

一 前置检查与准备

  • 版本与模式:生产建议 Kafka 3.4+(KRaft 模式)2.8+(ZooKeeper 模式)Java 11+;操作系统 CentOS 7.9+;网络 ≥1Gbps(推荐 10Gbps)
  • 健康基线:集群无 Under-Replicated 分区,各 Broker 在线;磁盘剩余 >50%;Consumer LAG 在业务容忍范围内。
  • 容量与副本:避免单 Broker 与 副本因子=1 的集群;扩容前先修复故障盘与异常。
  • 维护窗口:分区再平衡会产生大量数据迁移,建议在低峰期执行,并提前通知业务方。
  • 新节点准备:安装同版本 Kafka 与 JDK,创建数据目录并设置权限,配置唯一 broker.idlisteners/advertised.listenerslog.dirs;KRaft 模式按 KRaft 要求配置元数据目录与集群 ID。

二 添加新 Broker 到集群

  • 安装与权限(示例路径与用户):
    • 安装 Java:sudo yum install -y java-11-openjdk java-11-openjdk-devel
    • 部署 Kafka:/opt/kafka_2.13-3.4.0.tgz 解压并软链为 /opt/kafka
    • 创建用户与目录:sudo useradd -r -s /bin/false kafkasudo mkdir -p /kafka-logssudo chown -R kafka:kafka /opt/kafka /kafka-logs
  • 关键配置 server.properties(示例为新增 broker.id=4):
    • broker.id=4
    • listeners=PLAINTEXT://<新节点IP>:9092
    • advertised.listeners=PLAINTEXT://<新节点IP>:9092
    • log.dirs=/kafka-logs
    • ZooKeeper 模式:zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
    • KRaft 模式:配置 process.roles=broker,controllercontroller.quorum.voters=1@broker1:9093,2@broker2:9093,3@broker3:9093,4@broker4:9093listeners=CONTROLLER://<IP>:9093,PLAINTEXT://<IP>:9092inter.broker.listener.name=PLAINTEXTcontroller.listener.names=CONTROLLER
  • 启动与纳管:
    • 启动:/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
    • 验证:/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server <任一现有Broker>:9092 | grep -E '^[0-9]+',应能看到新 Broker ID

三 分区再平衡与限流

  • 方式 A(推荐,按 Topic 列表生成计划):
    1. 生成迁移计划
    • ZooKeeper 模式:/opt/kafka/bin/kafka-reassign-partitions.sh --zookeeper <ZK>:2181 --topics-to-move-json-file topics.json --broker-list "4,5" --generate
    • KRaft 模式:/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <任一Broker>:9092 --topics-to-move-json-file topics.json --broker-list "4,5" --generate
    1. 审核 JSON 计划(关注每个分区的 replicas 是否包含新增 Broker,迁移数据量是否可接受)
    2. 执行迁移
    • ZK:--execute --reassignment-json-file expand.json
    • KRaft:--execute --reassignment-json-file expand.json
    1. 验证进度
    • ZK:--verify
    • KRaft:--verify
  • 方式 B(全量均衡,适合一次性均衡整个集群):
    • 生成:--generate(不指定 topics,基于当前分配生成建议)
    • 执行与验证:同上
  • 限流与性能控制(示例将迁移速率限制在 100MB/s):
    • 设置:/opt/kafka/bin/kafka-configs.sh --bootstrap-server <任一Broker>:9092 --alter --entity-type broker --entity-name <BrokerID> --add-config 'replica.reassignment.throttled.rate=104857600'
    • 按 Topic 细化:--entity-type topic --entity-name <TopicName> --add-config 'replica.reassignment.throttled.rate=104857600'
    • 验证限流:/opt/kafka/bin/kafka-configs.sh --bootstrap-server <任一Broker>:9092 --describe --entity-type broker --entity-name <BrokerID>
    • 完成后移除限流:--delete-config 'replica.reassignment.throttled.rate'
  • 时间预估:迁移时间(小时)≈ 需迁移数据量(GB) /(迁移带宽(MB/s) × 3600)× 1.5。例如 1TB 数据、带宽 100MB/s,预计约 4.2 小时

四 验证与优化

  • 完成性验证:
    • 再平衡完成:--verify 显示所有分区 Successfully completed
    • 无异常分区:/opt/kafka/bin/kafka-topics.sh --bootstrap-server <任一Broker>:9092 --describe --under-replicated-partitions 应无输出
    • 分区分布:各 Topic 的 Leader/副本 均匀落在新旧 Broker 上
  • 负载与业务:
    • 监控 CPU/网络/磁盘 IO,确认峰值可控
    • 监控 Consumer Lag,确保无明显增长
  • Leader 均衡(可选):
    • 自动:auto.leader.rebalance.enable=true(默认开启)
    • 手动:/opt/kafka/bin/kafka-leader-election.sh --bootstrap-server <任一Broker>:9092 --election-type preferred --all-topic-partitions
  • 并行度优化:若热点明显,可增加 Topic 分区数(仅可增加):
    • /opt/kafka/bin/kafka-topics.sh --bootstrap-server <任一Broker>:9092 --alter --topic <Topic> --partitions <新分区数>
    • 注意:增加分区可能影响基于分区的顺序性,客户端需评估兼容性。

五 常见问题与回滚

  • 常见故障与处理:
    • 再平衡导致业务抖动:提前限流;必要时暂停非核心生产流量
    • Under-Replicated 增多:检查网络与磁盘,确认 ISR 能追上;必要时回滚迁移
    • 迁移卡住:核查目标磁盘空间、带宽、JVM GC;必要时拆分再平衡计划
  • 回滚步骤:
    • 停止正在执行的再平衡(Ctrl+C 或等待失败)
    • 使用最近一次“生成”的计划 JSON,将 replicas 恢复为扩容前分布
    • 执行 --execute--verify 直至完成
    • 移除限流配置,恢复业务
  • 不建议扩容的场景:单 Broker、副本因子=1、老版本 <2.4、磁盘故障未修复、网络带宽不足(<1Gbps)、无监控基线。

0