阅读量:259
Kafka集群扩容配置指南
一、扩容前准备工作
- 评估容量需求:根据预期业务增长(如QPS、消息量、保留时间),计算所需磁盘空间(例如:每天1000万条2MB消息、保留14天、副本数2,总空间约为54GB,建议预留10%-20%缓冲)。同时确认网络带宽(推荐10Gbps以上)、CPU(监控使用率
- 检查集群健康:确保现有ZooKeeper集群(Kafka依赖其管理元数据)运行正常(无节点宕机、网络延迟低),现有Broker节点无异常(如Under Replicated Partitions=0、磁盘空间充足)。
- 准备新节点:选择与现有集群配置一致的服务器(如Kafka版本、JDK版本、操作系统),安装Kafka二进制包并配置Java环境(建议JDK 11及以上)。
二、新Broker节点配置
- 修改server.properties核心参数(关键配置项):
broker.id:集群内唯一标识(如现有节点为0-3,新节点可设为4),禁止使用自动生成(-1)。listeners:客户端连接的监听地址(格式:协议://IP:端口,如PLAINTEXT://192.168.1.100:9092),需确保IP可达且端口未被占用。advertised.listeners:客户端实际连接的地址(若集群跨机房或需公网访问,需设置为公网IP或域名,如PLAINTEXT://public-ip:9092),确保客户端能正确路由到新节点。log.dirs:消息日志存储路径(建议挂载不同磁盘,用逗号分隔,如/data/kafka-logs1,/data/kafka-logs2),提升IO吞吐量和容错性。zookeeper.connect:ZooKeeper集群连接信息(格式:host1:port1,host2:port2,host3:port3,如zk1:2181,zk2:2181,zk3:2181),无需修改但需确认连接正常。
- 启动新Broker:执行
bin/kafka-server-start.sh config/server.properties命令启动Broker,观察日志确认无报错(如“Started KafkaServer”)。
三、分区重平衡配置(可选但推荐)
- 生成分区计划:使用
kafka-reassign-partitions.sh工具生成初始分区迁移计划(指定Topic列表和目标Broker列表)。例如,创建topic.json文件(包含需迁移的Topic名称和分区数),执行命令:bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --topics-to-move-json-file topic.json --broker-list "0,1,2,3,4" --generate,生成包含当前分区分布和目标分布的JSON文件。 - 调整并执行迁移计划:修改生成的JSON文件(如
reassignment.json),明确每个Topic分区的目标副本分布(如将topic1的partition 0迁移至broker 4),执行命令:bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --execute。 - 验证迁移结果:执行命令:
bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file reassignment.json --verify,确认所有分区已完成迁移(状态为“completed”)。
四、扩容后验证与监控
- 检查集群状态:使用
kafka-topics.sh命令查看Topic分区分布(--describe --under-replicated-partitions),确认新节点已承担分区(如PartitionCount:3, ReplicationFactor:2, Leaders:1, Followers:2中,Leaders或Followers包含新Broker的ID)。 - 监控集群性能:通过Prometheus+Grafana等工具监控关键指标:
- Under Replicated Partitions(URP):需为0(表示所有副本同步正常);
- Active Controller Count:应为1(集群控制器正常);
- Network Processor Idle Ratio:应>70%(网络线程未过载);
- Disk Write Latency:应<10ms>
- 测试客户端兼容性:使用生产者(
kafka-producer-perf-test.sh)和消费者(kafka-consumer-perf-test.sh)工具测试新集群的吞吐量(如--num-records 1000000 --record-size 1000 --throughput -1),确认消息发送/接收正常(无超时、错误)。