10.2.6 集群启动、验证与基准测试
在完成安装与配置后,进入集群启动、验证与基准测试阶段,目标是确认集群可用性、复制机制正常、吞吐与时延满足预期,并形成可复用的验收流程。
原理草图:启动与流量验证链路
1. 集群启动流程与顺序(含命令解释)
- ZooKeeper 模式:先 ZK 再 Broker
# 1) 启动 ZooKeeper(示例使用 systemd)
systemctl start zookeeper
systemctl status zookeeper # 期望:Active: active (running)
# 2) 启动 Kafka Broker
systemctl start kafka
systemctl status kafka # 期望:Active: active (running)
- KRaft 模式:先控制器再数据节点
# 1) 控制器节点
systemctl start kafka-controller
# 2) 数据节点
systemctl start kafka-broker
- 关键端口与日志检查
# 端口检查:9092/9093 监听
ss -lntp | grep -E '9092|9093'
# 关键日志
tail -n 100 /var/log/kafka/server.log
# 期望:无 FATAL/ERROR,出现 "KafkaServer started"
2. 基础可用性验证(含完整示例)
- 查看集群元数据
kafka-broker-api-versions.sh --bootstrap-server broker1:9092
# 期望:列出可用的 API 版本,非空且无连接错误
- 创建测试主题
kafka-topics.sh --create \
--topic test \
--bootstrap-server broker1:9092 \
--partitions 3 \
--replication-factor 2
kafka-topics.sh --describe --topic test --bootstrap-server broker1:9092
# 期望:Partitions=3 ReplicationFactor=2
- 生产与消费验证
# 生产者
kafka-console-producer.sh --topic test --bootstrap-server broker1:9092
# 手动输入:hello kafka
# 消费者
kafka-console-consumer.sh --topic test --bootstrap-server broker1:9092 --from-beginning
# 期望:看到 "hello kafka"
3. 副本与高可用验证(含模拟与排错)
- 查看 ISR
kafka-topics.sh --describe --topic test --bootstrap-server broker1:9092
# 重点关注 ISR 列表是否包含期望副本数
- Broker 异常模拟
# 停止一个 Broker
systemctl stop kafka
# 观察 ISR 变化
kafka-topics.sh --describe --topic test --bootstrap-server broker1:9092
# 恢复 Broker
systemctl start kafka
# 期望:ISR 恢复到完整副本
4. 基准测试(Benchmark)与结果解读
- 生产者性能测试
kafka-producer-perf-test.sh \
--topic test \
--num-records 1000000 \
--record-size 1000 \
--throughput -1 \
--producer-props bootstrap.servers=broker1:9092 acks=1 linger.ms=5 batch.size=32768
- 消费者性能测试
kafka-consumer-perf-test.sh \
--topic test \
--messages 1000000 \
--broker-list broker1:9092 \
--fetch-size 1048576
- 关键指标解读
- 吞吐量:records/sec、MB/sec(越高越好)
- 时延:avg latency、max latency(越低越好)
- 错误率:error count 应为 0
5. 常见问题与排错示例
- 连接超时
# 检查网络与端口
ping broker1
ss -lntp | grep 9092
# 检查 advertised.listeners 是否可达
grep advertised.listeners /etc/kafka/server.properties
# 期望:对外可访问 IP/域名
- ISR 长期不全
# 检查磁盘与网络
iostat -x 1 3
sar -n DEV 1 3
# 检查日志中的 ReplicaFetcher 异常
grep -E "ReplicaFetcher|ISR" /var/log/kafka/server.log | tail -n 50
6. 基准测试建议参数(含原因)
- 生产者:
- acks=1:吞吐优先
- acks=all:一致性优先
- linger.ms、batch.size:提升批量写入效率
- Broker:
- num.network.threads、num.io.threads:匹配 CPU/磁盘能力
- log.segment.bytes、log.retention.hours:控制磁盘压力与回收策略
7. 练习与验收
- 练习 1:创建 test-ha 主题(3 副本),停止 1 个 Broker,验证消费者无中断。
- 练习 2:使用 acks=all 再次压测,记录吞吐与时延变化。
- 练习 3:修改 advertised.listeners 为错误地址,复现生产连接失败并恢复。
验收清单
- 集群能正常启动并保持稳定心跳
- 主题创建、生产、消费功能正常
- 副本同步无异常、ISR 健康
- 基准测试结果与预估容量匹配
- 监控指标可采集(JMX/Prometheus)
完成以上步骤后,集群可进入正式投产阶段,并建议将测试脚本与参数固化为标准运维流程。