首页/数据/数据工程与 ETL 速查/Kafka 集群扩容流程
Kafka64 条

Kafka 集群扩容流程

扩容分三步:新节点以唯一 broker.id 加入集群;用重分配把存量分区迁移过去;验证 ISR 与负载后再取消限速。仅加机器不会自动均衡数据。

集群扩容是什么

Kafka 扩容分三步:新节点以唯一的 broker.id 加入集群;用分区重分配工具把存量分区迁移过去;确认 ISR 收敛、磁盘与网络水位正常后取消限速。关键认知是——仅增加机器不会自动均衡数据,新节点只会承担新建主题的分区,存量分区的副本仍留在老节点上。

基本信息

新节点配置唯一 broker.id、独立 log.dirs、一致的分区/副本相关配置
集群发现ZooKeeper 模式下 zookeeper.connect 一致;KRaft 模式下需按版本方式把新节点纳入控制器仲裁
迁移工具kafka-reassign-partitions.sh,含 --generate、--execute、--verify 三个阶段
限速参数--throttle 指定迁移带宽上限,配合副本限流配置
观察指标未同步副本数、迁移中的分区进度、节点磁盘与网络水位

典型使用场景

  • 容量不足:磁盘接近写满或 CPU 长期高位,需要横向加节点
  • 吞吐瓶颈:单节点网络或磁盘成为瓶颈,通过分散负载缓解
  • 机房调整:新机架或新机器上线后,把部分副本迁过去改善容灾
  • 下线替换:老机器要退役,先把其上的分区迁走再摘除节点
  • 故障后重建:节点恢复后重新承接原有分区分布

生成并执行重分配

生成并执行重分配
# 1) 指定要迁移的主题与目标 broker 列表,生成重分配方案
cat > topics.json <<'EOF'
{"topics": [{"topic": "prod.order.created.v1"}], "version": 1}
EOF
kafka-reassign-partitions.sh --bootstrap-server kafka1:9092 \
  --topics-to-move-json-file topics.json \
  --broker-list "1,2,3,4" --generate > plan.json

# 2) 限速执行:带宽预算按集群空闲能力设定,避免迁移影响在线读写
kafka-reassign-partitions.sh --bootstrap-server kafka1:9092 \
  --reassignment-json-file plan.json --throttle 104857600 --execute

# 3) 验证进度与结果,确认完成后取消限速
kafka-reassign-partitions.sh --bootstrap-server kafka1:9092 \
  --reassignment-json-file plan.json --verify

观察与收尾

观察与收尾
# 查看未同步副本与分区分布是否均衡
kafka-topics.sh --bootstrap-server kafka1:9092 --describe --under-replicated-partitions
kafka-topics.sh --bootstrap-server kafka1:9092 --describe | awk '{print $8}' | sort | uniq -c

# 迁移完成后确认限流配置已移除,否则后续复制仍被限速
kafka-configs.sh --bootstrap-server kafka1:9092 \
  --entity-type brokers --entity-name 4 --describe | grep -i throttled

扩容阶段检查

阶段检查项异常表现
加入新节点出现在 broker 列表且 broker.id 唯一id 重复会导致节点被拒绝注册
迁移分区副本逐个完成迁移长时间卡在进度不动,多为限流过严或磁盘不足
验证未同步副本收敛为 0持续非 0 说明副本同步受阻
收尾移除迁移限流配置忘记移除会长期限制正常复制速率
扩容不会改变已有主题的副本分布:不显式执行重分配,新节点只是闲置。迁移要选在业务低峰,因为迁移期间老节点仍要读出全量数据,磁盘与网络压力是叠加的。

易错点

  • 只启动新节点不做重分配,新节点闲置,负载依旧不均衡
  • broker.id 与现有节点重复,新节点无法正常加入集群
  • 迁移不限速且在高峰执行,老节点磁盘与网络被读放大拖垮,影响在线消费
  • 迁移完成后忘记移除限流配置,长期限制副本复制速率
  • 迁移期间直接删除旧副本目录或手工调整副本分配,破坏了集群自愈能力

数据来源与参考

  • Apache Kafka 官方文档:Adding and Removing Brokers / Expanding Clusters
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌