在 Debian 上对 Kafka 进行扩容,通常分为 Broker 扩容(加机器/加节点) 和 Topic 分区扩容(增加吞吐) 两类。下面按实际运维流程说明。
在 Debian 新机器上:
apt update
apt install -y openjdk-17-jdk
下载 Kafka(版本要和现有集群一致):
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
mv kafka_2.13-3.7.0 /opt/kafka
编辑 /opt/kafka/config/server.properties
关键参数(不要和已有 broker 冲突):
broker.id=3
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://<新节点IP>:9092
# ZooKeeper 模式
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
# 或 KRaft 模式
process.roles=broker
controller.quorum.voters=1@k1:9093,2@k2:9093,3@k3:9093
⚠️
broker.id必须唯一
/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
新 broker 启动后 不会自动迁移数据,需要手动 reassign。
/opt/kafka/bin/kafka-reassign-partitions.sh \
--bootstrap-server broker1:9092 \
--topics-to-move-json-file topics.json \
--broker-list "0,1,2,3" \
--generate
topics.json 示例:
{
"topics": [
{"topic": "test-topic"}
],
"version": 1
}
kafka-reassign-partitions.sh \
--bootstrap-server broker1:9092 \
--reassignment-json-file reassignment.json \
--execute
kafka-reassign-partitions.sh \
--bootstrap-server broker1:9092 \
--reassignment-json-file reassignment.json \
--verify
kafka-topics.sh --bootstrap-server broker1:9092 --describe --topic test-topic
kafka-topics.sh \
--bootstrap-server broker1:9092 \
--alter \
--topic test-topic \
--partitions 12
⚠️ 分区只能增不能减
⚠️ 已有 key 的 message 分区映射会变
如果是单机磁盘不够:
log.dirs=/data1/kafka-logs,/data2/kafka-logs
Kafka 会自动做磁盘均衡(按比例)
lvextend -L +100G /dev/vg0/kafka
resize2fs /dev/vg0/kafka
| 问题 | 说明 |
|---|---|
| broker.id 冲突 | 集群直接异常 |
| 版本不一致 | 不兼容 |
| 不 reassign | 新节点无数据 |
| 分区数过多 | controller 压力大 |
| 网络延迟高 | ISR 频繁抖动 |
✅ Broker 扩容
✅ Topic 扩容
kafka-topics.sh --alter --partitions✅ 磁盘扩容
log.dirs 或 LVM如果你愿意,可以告诉我:
我可以给你一份 可直接执行的扩容脚本。