Debian Kafka集群扩容操作步骤
kafka-topics.sh --bootstrap-server <现有节点IP>:9092 --describe查看主题状态,确保无under-replicated分区;zkServer.sh status检查所有节点状态是否为“leading”或“following”。/opt/kafka):cd /opt 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 mv kafka_2.12-3.5.2 kafka-new /opt/kafka-new/config),编辑server.properties,设置以下关键参数: broker.id:唯一标识(现有集群中所有Broker的ID不得重复,如现有最大ID为2,新节点设为3);listeners:指定Broker监听地址(如PLAINTEXT://<新节点IP>:9092,确保客户端可访问);log.dirs:消息日志存储目录(如/opt/kafka-new/logs,需提前创建并赋予权限chown -R kafka:kafka /opt/kafka-new);zookeeper.connect:现有ZooKeeper集群连接字符串(如node1:2181,node2:2181,node3:2181,需与现有集群配置一致);advertised.listeners:对外暴露的Broker地址(如PLAINTEXT://<公网IP>:9092,确保客户端能通过该地址连接)。log.retention.hours、num.partitions)有更新,需将新配置同步至新节点,避免后续问题。/opt/kafka-new/bin/kafka-server-start.sh /opt/kafka-new/config/server.properties & 使用ps -ef | grep kafka确认进程是否运行,若进程存在则表示启动成功。/opt/kafka-new/bin/zookeeper-shell.sh node1:2181 ls /brokers/ids 输出应包含新节点的broker.id(如[0,1,2,3]),表示新节点已成功加入集群。/opt/kafka-new/bin/kafka-topics.sh --bootstrap-server <新节点IP>:9092 --describe 若能正常列出主题信息,则说明新节点可正常提供服务。扩容后,新节点未分配现有分区的副本,需通过分区重分配将现有分区的副本迁移到新节点,实现负载均衡。步骤如下:
topics-to-move.json),指定需要迁移的主题(或所有主题):{"topics": [{"topic": "my_topic", "partitions": ["0", "1", "2"]}], "version": 1} 或迁移所有主题:{"topics": [{"topic": "*", "partitions": ["0", "1", "2"]}], "version": 1} 执行以下命令生成重分配计划(--broker-list为新节点ID,如3):/opt/kafka-new/bin/kafka-reassign-partitions.sh --bootstrap-server <现有节点IP>:9092 \ --topics-to-move-json-file topics-to-move.json \ --broker-list "3" \ --generate 输出会显示建议的重分配方案(如将my_topic的副本从[0,1,2]调整为[0,1,3])。reassignment.json(如上述输出),执行以下命令开始迁移:/opt/kafka-new/bin/kafka-reassign-partitions.sh --bootstrap-server <现有节点IP>:9092 \ --reassignment-json-file reassignment.json \ --execute 此时,Kafka会自动将指定分区的副本迁移到新节点。/opt/kafka-new/bin/kafka-reassign-partitions.sh --bootstrap-server <现有节点IP>:9092 \ --reassignment-json-file reassignment.json \ --verify 输出示例:{"partitions": [{"topic": "my_topic", "partition": 0, "status": "completed"}, ...]}, "version": 1} 所有分区状态为“completed”则表示迁移完成。kafka-consumer-groups.sh查看消费者滞后)或第三方工具(如Prometheus+Grafana)监控集群的CPU、内存、磁盘使用率及消息吞吐量,确保新节点负载均衡。server.properties): num.network.threads:网络线程数(默认3,高负载时可调整为8);num.io.threads:I/O线程数(默认8,高负载时可调整为16);log.flush.interval.messages:消息刷盘间隔(默认10000,低延迟场景可调整为1000)。