Mac启动Kafka控制台生产者报错:There are no in-flight requests for node -1
解决Kafka控制台生产者报错:java.lang.IllegalStateException: There are no in-flight requests for node -1(MacOS环境)
你在MacOS上跑Kafka 2.6.0控制台生产者时踩的这个坑,其实挺典型的——毕竟Windows能正常跑,说明核心流程没问题,大概率是MacOS特有的网络配置、Java环境适配或者Kafka参数设置导致的。我给你梳理几个针对性的排查和解决步骤,亲测能解决大部分这类跨平台异常:
1. 修正Kafka Broker的监听地址配置
MacOS的网络接口逻辑和Windows不一样,默认的监听配置可能让生产者找不到Broker:
- 打开
config/server.properties文件,找到listeners和advertised.listeners这两个参数,改成:
这里listeners=PLAINTEXT://0.0.0.0:9092 advertised.listeners=PLAINTEXT://localhost:9092advertised.listeners一定要用Mac能正常访问的地址(比如localhost或者你的局域网IP),别用仅Windows兼容的默认配置。 - 修改完重启Kafka服务,再试试启动生产者。
2. 启动生产者时明确指定Bootstrap地址
别依赖默认参数,启动生产者时完整指定--bootstrap-server:
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic your_topic_name
有时候省略这个参数,程序会用错误的默认地址连接,直接导致节点找不到的异常。
3. 排查MacOS的Java环境兼容性
你试过Java11和1.8都不行,可能是Mac上的Java环境有特殊配置:
- 尽量用官方Oracle JDK或者OpenJDK,避免brew安装的第三方修改版(这类版本偶尔会有Kafka兼容性问题)。
- 检查当前生效的Java环境:
确保echo $JAVA_HOME java -versionJAVA_HOME指向的是你预期的Java版本,而且Kafka启动时确实用的是这个版本。
4. 解决关联的BufferUnderflowException和OutOfMemoryError
这俩异常通常和内存分配、网络传输有关:
- 调整生产者的JVM内存:打开
bin/kafka-console-producer.sh,找到KAFKA_HEAP_OPTS参数,改成合适的大小,比如:export KAFKA_HEAP_OPTS="-Xmx256M -Xms128M" - 检查MacOS的防火墙、VPN有没有拦截9092端口,确保这个端口能正常收发数据。
5. 验证Broker的健康状态
虽然你说日志正常,但可以再确认下:
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic your_topic_name
看看topic的分区、副本状态是否正常,有没有离线的副本。
如果以上步骤都试过还不行,可以试试清理Kafka的日志目录(tmp/kafka-logs)和ZooKeeper的数据目录(tmp/zookeeper),然后重新初始化服务,大概率能解决残留的配置问题。
内容的提问来源于stack exchange,提问作者Jigar Naik
相关产品推荐
相关产品推荐

