在 Ubuntu 上对 Kafka 进行扩容,通常分为几种场景,最常见的是 Broker 节点扩容(加机器/加进程)。下面按实际操作流程给你讲清楚,适合生产环境。
注意:Kafka 不支持减少副本数自动收缩,只能扩。
在新 Ubuntu 机器上:
sudo apt update
安装 JDK(如未安装):
sudo apt install openjdk-11-jdk -y
下载 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
mv kafka_2.13-3.6.1 /opt/kafka
编辑:
vi /opt/kafka/config/server.properties
关键配置(每个节点不同):
broker.id=2 # 不能和已有节点重复
listeners=PLAINTEXT://:9092
log.dirs=/data/kafka-logs
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
如果是 KRaft 模式(无 ZooKeeper):
process.roles=broker
controller.quorum.voters=0@kafka1:9093,1@kafka2:9093,2@kafka3:9093
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
检查:
jps
# 看到 Kafka 进程即可
bin/kafka-broker-api-versions.sh --bootstrap-server kafka1:9092
或:
bin/kafka-topics.sh --bootstrap-server kafka1:9092 --describe
新 Broker 加入后 不会自动分担数据,需要手动 reassign。
bin/kafka-reassign-partitions.sh \
--bootstrap-server kafka1:9092 \
--topics-to-move-json-file topics.json \
--broker-list "0,1,2" \
--generate
topics.json 示例:
{
"topics": [
{"topic": "test-topic"}
],
"version": 1
}
会生成:
current-cluster-reassignment.jsonproposed-cluster-reassignment.jsonbin/kafka-reassign-partitions.sh \
--bootstrap-server kafka1:9092 \
--reassignment-json-file proposed-cluster-reassignment.json \
--execute
bin/kafka-reassign-partitions.sh \
--bootstrap-server kafka1:9092 \
--reassignment-json-file proposed-cluster-reassignment.json \
--verify
bin/kafka-topics.sh \
--bootstrap-server kafka1:9092 \
--alter --topic test-topic \
--partitions 6
分区数只能增加,不能减少
✅ 新节点 broker.id 唯一
✅ Kafka 版本必须一致
✅ 重分配会占用 IO,建议低峰期
✅ 如果是生产,建议限速:
# server.properties
replica.fetch.max.bytes=1048576
Kafka 扩容标准流程:
server.properties如果你愿意,我可以:
你现在是 ZooKeeper 还是 KRaft?几台机器?