在 Linux 环境下对 Kafka 集群进行扩容,通常分为Broker 节点扩容和Topic 分区扩容两类。下面按实际运维场景给你一套完整思路。
在新 Linux 服务器上:
编辑 server.properties:
broker.id=新唯一ID
listeners=PLAINTEXT://:9092
log.dirs=/data/kafka-logs
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
⚠️ 注意:
broker.id 不能和现有节点冲突nohup bin/kafka-server-start.sh config/server.properties &
查看日志:
tail -f logs/server.log
确认新节点已注册到 ZooKeeper。
新 Broker 加入后 不会自动迁移数据,需要手动 reassign。
bin/kafka-topics.sh --zookeeper zk1:2181 \
--describe --topic your_topic
bin/kafka-reassign-partitions.sh \
--zookeeper zk1:2181 \
--topics-to-move-json-file topics.json \
--broker-list "0,1,2,3" \
--generate
示例 topics.json:
{
"topics": [
{"topic": "your_topic"}
],
"version": 1
}
bin/kafka-reassign-partitions.sh \
--zookeeper zk1:2181 \
--reassignment-json-file reassign.json \
--execute
bin/kafka-reassign-partitions.sh \
--zookeeper zk1:2181 \
--reassignment-json-file reassign.json \
--verify
✅ 数据迁移完成,扩容生效。
如果只是想提高并发消费能力:
bin/kafka-topics.sh --zookeeper zk1:2181 \
--alter --topic your_topic \
--partitions 12
⚠️ 注意:
✅ 扩容在低峰期进行
✅ 优先使用 Kafka 自带的 reassign 工具
✅ 监控磁盘 IO、网络、消费 lag
✅ 使用 Cruise Control(可选,自动化再均衡)
❌ broker.id 冲突
❌ log.dirs 权限不足
❌ ZooKeeper 地址写错
❌ 扩容后未做 reassign(磁盘不均衡)
如果你愿意,可以告诉我:
我可以给你一份可直接执行的扩容脚本。