kafka在centos如何扩容
导读:在 CentOS 上为 Kafka 扩容的实操指南 一 前置检查与准备 版本与模式:生产建议 Kafka 3.4+(KRaft 模式) 或 3.0+(ZooKeeper 模式);Java 11+;操作系统 CentOS 7.9+。单 Br...
在 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 kafka;mkdir -p /kafka-logs;chown -R kafka:kafka /opt/kafka /kafka-logs
- 安装 Java:
- 配置 server.properties(关键项,KRaft 与 ZK 二选一)
- KRaft 模式(示例,新增节点 Broker ID 为 4)
process.roles=broker,controllercontroller.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:9093listeners=PLAINTEXT://192.168.1.14:9092,CONTROLLER://192.168.1.14:9093advertised.listeners=PLAINTEXT://192.168.1.14:9092listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXTinter.broker.listener.name=PLAINTEXTlog.dirs=/kafka-logsbroker.id=4
- ZooKeeper 模式(示例)
broker.id=4listeners=PLAINTEXT://192.168.1.14:9092advertised.listeners=PLAINTEXT://192.168.1.14:9092log.dirs=/kafka-logszookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
- KRaft 模式(示例,新增节点 Broker ID 为 4)
- 启动与纳管
- 启动:
/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)
- KRaft:
- 启动:
三 分区再平衡与限流
- 方式 A(推荐,按 Topic 列表生成计划)
- 生成待迁移 Topic 列表
cat > topics-to-move.json < < EOF { "topics": [{ "topic": "my-topic"} ], "version": 1 } EOF - 生成重分配计划(目标 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 - 审核 JSON 计划(关注每个分区的 replicas 是否包含新 Broker,迁移数据量是否可接受)
- 执行迁移
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.1.11:9092 \ --reassignment-json-file expand-cluster-reassignment.json --execute - 监控进度与完成
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.1.11:9092 \ --reassignment-json-file expand-cluster-reassignment.json --verify
- 生成待迁移 Topic 列表
- 方式 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.replicas与follower.replication.throttled.replicas)
- 在 server.properties 设置迁移带宽(示例 5 MB/s):
- 时间预估:迁移时间(小时) ≈ 需迁移数据量(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/副本分布大致均衡)
- 无 Under-Replicated 分区:
- 业务影响:
- 监控 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/端口是否可达,避免内外网错配。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka在centos如何扩容
本文地址: https://pptw.com/jishu/767801.html
