在 Debian 上部署的 Kafka 集群扩容节点,本质上就是 增加 Broker 并重新分配 Partition/副本。下面按实操流程说明(以 Kafka 3.x 为例,ZooKeeper 模式;如用 KRaft 模式略有不同)。
在新机器上:
# 安装 Java
apt update
apt install -y openjdk-17-jdk
# 创建 kafka 用户(可选)
useradd -m kafka
从旧节点复制 Kafka 目录,或重新下载:
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -xzf kafka_2.13-3.6.1.tgz -C /opt
ln -s /opt/kafka_2.13-3.6.1 /opt/kafka
编辑配置文件:
vi /opt/kafka/config/server.properties
关键配置(不要和旧节点冲突)
broker.id=3 # 新 ID,集群内唯一
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://<新节点IP>:9092
log.dirs=/data/kafka-logs
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
如果是 KRaft 模式,需要配置
controller.quorum.voters
创建数据目录:
mkdir -p /data/kafka-logs
chown -R kafka:kafka /data/kafka-logs
su kafka
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
检查是否加入集群:
/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server 新节点IP:9092
或在 ZooKeeper 中:
get /kafka/brokers/ids
新节点不会自动使用,必须 重新分配 Partition。
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server 任意旧节点:9092 \
--list > topics.txt
/opt/kafka/bin/kafka-reassign-partitions.sh \
--bootstrap-server 旧节点:9092 \
--topics-to-move-json-file topics.json \
--broker-list "0,1,2,3" \
--generate
会输出一个 JSON,保存为
reassign.json
/opt/kafka/bin/kafka-reassign-partitions.sh \
--bootstrap-server 旧节点:9092 \
--reassignment-json-file reassign.json \
--execute
/opt/kafka/bin/kafka-reassign-partitions.sh \
--bootstrap-server 旧节点:9092 \
--reassignment-json-file reassign.json \
--verify
✅ 完成后,新节点开始承载 Partition。
如果原来副本因子是 1,可提升为 3:
{
"version": 1,
"partitions": [
{"topic":"test","partition":0,"replicas":[0,1,3]}
]
}
然后执行 --execute。
log.dirs/opt/kafka/bin/kafka-storage.sh format \
--config server.properties \
--cluster-id xxx
bin/kafka-server-start.sh -daemon config/server.properties
其余 Partition 再均衡流程一致。
如果你愿意,可以告诉我:
我可以给你 针对你环境的完整配置示例。