systemctl status kafka 确认服务是否运行,未运行则启动:systemctl start kafka。/var/log/kafka/server.log 或自定义日志路径,定位错误信息(如配置错误、网络异常等)。server.properties 关键配置:broker.id(唯一性)、listeners(监听地址)、zookeeper.connect(路径正确性)、log.dirs(磁盘权限)。ping 和 telnet 测试节点间连通性,确保端口(默认9092)未被防火墙拦截:iptables -L -n | grep <port>。ss -tulnp | grep kafka 确认服务监听状态。top/htop 检查CPU、内存使用率,df -h 确保磁盘空间充足(尤其 log.dirs 所在分区)。| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 服务无法启动 | 配置错误、端口占用、ZK异常 | 1. 检查日志定位具体错误; 2. 用 lsof -i:<port> 查看占用进程并终止;3. 确保ZK服务正常。 |
| 消息堆积 | 消费者处理慢、分区不足 | 1. 优化消费者代码(异步处理、批量拉取); 2. 增加分区数: kafka-topics.sh --alter --partitions <新分区数> --topic <主题名>。 |
| 数据丢失 | 生产者未开启ACK、副本同步失败 | 1. 生产者配置 acks=all、retries=3;2. Broker设置 min.insync.replicas=2。 |
| 消费者重复消费 | Offset提交失败 | 1. 手动提交Offset:consumer.commitSync();2. 缩短自动提交间隔: auto.commit.interval.ms=1000。 |
| Leader切换频繁 | 网络波动、副本同步慢 | 1. 增加 retries 和 retry.backoff.ms;2. 调整 replica.socket.timeout.ms。 |
| 磁盘写满 | 日志保留策略不当 | 1. 清理过期日志:kafka-delete-records.sh;2. 配置 log.retention.hours 和 log.retention.bytes。 |
| ZK连接异常 | 会话超时、网络分区 | 1. 增加 zookeeper.session.timeout.ms;2. 分离Kafka与ZK物理资源,避免单点故障。 |
kafka-topics.sh:查看主题状态、分区分布。kafka-console-consumer.sh/producer.sh:测试消息收发。log.retention 策略)以预防资源耗尽问题。参考来源: