Debian环境下Kafka集群扩容操作指南
环境检查
确认现有集群状态:通过kafka-topics.sh --describe --bootstrap-server <现有BrokerIP>:9092查看Topic分区分布;通过ZooKeeper命令ls /brokers/ids确认现有Broker列表及健康状态。
确保新节点与现有集群版本一致(如均为Kafka 3.5.2)、网络互通(开放9092端口用于Broker通信、2181端口用于ZooKeeper通信),且磁盘空间充足(建议预留10%以上空间用于分区数据迁移)。
新节点基础环境配置
在新节点上安装与现有集群一致的Java环境(Kafka依赖JVM,推荐OpenJDK 8):
sudo apt update && sudo apt install -y openjdk-8-jdk
java -version # 验证安装
安装ZooKeeper客户端(若集群使用独立ZooKeeper集群,需确保新节点能访问ZooKeeper服务)。
下载并解压Kafka
在新节点上下载与现有集群版本一致的Kafka安装包(如3.5.2),并解压至指定目录(如/opt/kafka):
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
tar -xzf kafka_2.12-3.5.2.tgz -C /opt/
mv /opt/kafka_2.12-3.5.2 /opt/kafka
配置新节点参数
复制现有集群的server.properties模板(如/opt/kafka/config/server.properties)至新节点,修改以下关键配置(确保唯一性):
PLAINTEXT://<新节点IP>:9092);/var/log/kafka,需提前创建并赋予权限chown -R kafka:kafka /var/log/kafka);zk1:2181,zk2:2181,zk3:2181/kafka,需与现有集群配置一致)。启动新Broker
在新节点上以后台模式启动Kafka服务:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
验证Broker是否加入集群:通过现有集群的ZooKeeper节点执行ls /brokers/ids,确认输出包含新Broker的ID。
若需将现有Topic的分区数据迁移至新Broker以实现负载均衡,需执行以下步骤:
生成重分配计划
创建待迁移Topic列表文件(如topics-to-move.json):
{
"topics": [{"topic": "user-tracking"}, {"topic": "order-events"}],
"version": 1
}
使用kafka-reassign-partitions.sh生成迁移计划(目标Broker列表为现有Broker+新Broker,如3,4):
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <现有BrokerIP>:9092 \
--topics-to-move-json-file topics-to-move.json \
--broker-list "3,4" --generate
输出结果中的reassignment-json-file即为迁移计划文件(如expand-cluster-reassignment.json)。
执行分区迁移
运行以下命令执行迁移(需替换为实际计划文件路径):
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <现有BrokerIP>:9092 \
--reassignment-json-file expand-cluster-reassignment.json --execute
验证迁移结果
执行以下命令查看迁移进度,直至状态为completed:
/opt/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server <现有BrokerIP>:9092 \
--reassignment-json-file expand-cluster-reassignment.json --verify
迁移完成后,通过kafka-topics.sh --describe --bootstrap-server <现有BrokerIP>:9092 --topic <Topic名称>查看分区分布,确认新Broker已承载分区副本。
监控集群状态
使用Kafka自带工具或第三方监控平台(如Prometheus+Grafana)监控集群指标:
调整配置(可选)
根据新集群规模优化server.properties参数:
num.network.threads:网络线程数(默认3,可根据Broker负载调整至8-16);num.io.threads:IO线程数(默认8,建议设置为磁盘数量的2-3倍);log.retention.hours:日志保留时间(默认168小时,可根据业务需求调整)。kafka-console-consumer.sh导出至文件);