Debian上Kafka问题排查与修复指南
一 快速定位流程
ps aux、top/htop 检查 Kafka/ZooKeeper 是否存活、CPU/内存是否异常。tail -f /var/log/syslog、journalctl -u kafka -u zookeeper 捕捉启动失败、OOM、连接异常等线索。netstat -tulpen | grep 9092 或 lsof -i :9092 排查端口占用与监听地址是否正确。kafka-topics.sh --bootstrap-server <broker:9092> --describe 看分区与副本分布、ISR 是否正常。zkCli.sh ls /brokers/ids 检查在线 Broker ID。kafka-consumer-groups.sh --bootstrap-server <broker:9092> --describe --group <group> 定位滞后与再均衡。ping、traceroute/mtr 排查跨机房/跨网段问题。iostat -x 1 关注 %util、await,确认磁盘瓶颈。二 常见故障与修复要点
lsof -i :9092 找到占用进程并处理,或调整 server.properties 的 port。log.dirs、listeners、zookeeper.connect(ZK 模式)或 KRaft 相关配置。process.roles 配置正确。advertised.listeners 一致(含 IP/域名 与端口)。listeners 与客户端 security.protocol(如 PLAINTEXT/SSL/SASL_PLAINTEXT)匹配。batch.size、开启压缩(compression.type=snappy/lz4/zstd)、提高 buffer.memory。fetch.min.bytes 与 fetch.max.wait.ms,增加消费线程/实例并行度。num.network.threads/num.io.threads。acks=all、retries>0,开启幂等 enable.idempotence=true。min.insync.replicas(如 2),避免单副本写入。enable.auto.commit=false,在业务处理完成后手动提交。三 配置与部署关键点
JAVA_HOME 正确,避免版本不兼容。process.roles=broker,controllerlisteners=PLAINTEXT://:9092,CONTROLLER://:9093inter.broker.listener.name=PLAINTEXTcontroller.listener.names=CONTROLLERadvertised.listeners=PLAINTEXT://<本机IP>:9092node.id=<唯一ID>controller.quorum.voters=1@10.0.0.1:9093,2@10.0.0.2:9093,3@10.0.0.3:9093log.dirs=/data/kafka/logsbin/kafka-storage.sh format -t $(bin/kafka-storage.sh random-uuid) -c config/kraft/server.propertiesserver.properties 的 zookeeper.connect,确保 ZooKeeper 集群健康且网络可达。/etc/systemd/system/kafka.service 的 [Unit] 中设置 After=zookeeper.service,避免 Kafka 先于 ZooKeeper 启动导致注册失败。Environment="JAVA_HOME=...",Type=forking,ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties。systemctl daemon-reload && systemctl enable --now kafka 并重启验证。四 监控与日志分析
tail -f /var/log/syslog、dmesg、journalctl -u kafka 捕捉内核/服务异常;iostat -x 1 观察磁盘 %util/await 判断 I/O 瓶颈。五 安全加固与维护建议
security.protocol=SASL_SSL),配置 sasl.mechanism=PLAIN、信任库/密钥库路径与口令。apt update && apt upgrade)、清理过期日志、滚动重启完成配置生效。