CentOS配置Kafka常见问题及解决方法
broker.id重复、zookeeper.connect指向无效地址)、Zookeeper未启动、端口被占用、磁盘空间不足或权限问题。server.properties关键配置:确保broker.id在集群中唯一,zookeeper.connect格式正确(如localhost:2181或zk1:2181,zk2:2181,zk3:2181),listeners(本地监听地址,如PLAINTEXT://your_server_ip:9092)和advertised.listeners(客户端访问地址,需与客户端配置一致)设置无误。systemctl status zookeeper检查是否运行,未启动则执行systemctl start zookeeper。netstat -tuln | grep 9092查看端口是否被占用,若冲突则修改listeners中的端口。df -h检查log.dirs(如/tmp/kafka-logs)所在磁盘的可用空间,确保充足(建议预留20%以上)。kafka)对log.dirs、data.dirs等目录有读写权限(执行chown -R kafka:kafka /path/to/dir)。advertised.listeners配置错误、防火墙拦截、网络不通或客户端配置错误。advertised.listeners:确保其值为客户端能访问的地址(如公网IP或域名),例如advertised.listeners=PLAINTEXT://your_public_ip:9092,修改后重启Kafka。firewall-cmd --zone=public --add-port=9092/tcp --permanent添加端口,然后firewall-cmd --reload生效。ping your_server_ip和telnet your_server_ip 9092,确认网络可达且端口开放。bootstrap.servers指向正确的Kafka地址(如your_server_ip:9092),且与advertised.listeners一致。compression.type=gzip/snappy/lz4)、增大批量大小(batch.size=16384~1048576)和等待时间(linger.ms=10~100)、增加Topic分区数(num.partitions=3~8)、提升磁盘IO(如使用SSD)。metrics.sample.window.ms过小)、JVM内存不足或Kafka集群故障。解决方法:检查网络连通性、优化生产者配置(如增大metrics.sample.window.ms=30000)、监控JVM内存(使用jstat -gc <pid>)、检查Kafka集群状态(通过kafka-topics.sh --list验证Broker是否存活)。bootstrap.servers配置错误、网络问题或Kafka集群故障。解决方法:检查bootstrap.servers配置(需与生产者一致)、测试网络连通性、验证Kafka集群健康状态(如kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list)。bin/zookeeper-server-start.sh config/zookeeper.properties,若需后台运行可加&。systemctl status zookeeper(若通过systemd管理),或查看日志(tail -f /var/log/zookeeper/zookeeper.log)。echo stat | nc localhost 2181,若返回Mode: standalone则表示正常(集群模式下需检查Leader选举状态)。broker.id重复、listeners/advertised.listeners格式错误、log.dirs不存在或无权限、zookeeper.connect地址无效。broker.id唯一:每个Kafka broker的broker.id需不同(如0、1、2)。listeners和advertised.listeners:listeners为Broker本地监听地址(如PLAINTEXT://0.0.0.0:9092),advertised.listeners为客户端访问地址(如PLAINTEXT://your_domain:9092),若为集群需列出所有Broker地址(如PLAINTEXT://broker1:9092,PLAINTEXT://broker2:9092)。log.dirs目录:使用mkdir -p /path/to/kafka-logs创建目录,并设置正确权限(chown -R kafka:kafka /path/to/kafka-logs)。zookeeper.connect:确保地址和端口正确,且Zookeeper集群正常运行(如zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181)。useradd kafka创建用户,然后设置密码(passwd kafka)。/opt/kafka)、数据目录(log.dirs)和日志目录的所有权改为kafka用户(chown -R kafka:kafka /opt/kafka、chown -R kafka:kafka /path/to/kafka-logs)。su - kafka -c "bin/kafka-server-start.sh -daemon config/server.properties"以kafka用户启动Kafka。log.retention.hours设置过短导致日志过早删除,或log.segment.bytes设置过大导致日志分段过多。log.retention.hours(如log.retention.hours=168表示保留7天),或使用log.retention.bytes限制单个分区的日志大小。log.segment.bytes(如log.segment.bytes=1073741824表示1GB),避免分段过大影响清理效率。