本地Node-Red无法连接Docker部署的Kafka broker生产消息求助
问题根因
你的Docker部署的Kafka监听器配置存在两处错误:
KAFKA_LISTENERS中LISTENER_FRED绑定的是容器内部回环地址127.0.0.1,只会接收容器内部发起的请求,宿主机上的Node-Red请求无法被Kafka接收- 你映射了
9092端口到宿主机,但该端口对应的监听器返回的服务地址是容器内部域名kafka:9092,宿主机无法解析该域名,因此配置127.0.0.1:9092必然连接失败
修复步骤
- 修改docker-compose.yml中Kafka的配置,调整后完整配置如下:
zookeeper: image: confluentinc/cp-zookeeper:latest ports: - 2181:2181 environment: - ZOOKEEPER_CLIENT_PORT=2181 volumes: - zookeeper_data:/var/lib/zookeeper networks: - app_backend_network kafka: image: confluentinc/cp-kafka:latest environment: - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 # LISTENER_FRED绑定0.0.0.0监听所有网卡,接收宿主机请求 - KAFKA_LISTENERS=LISTENER_BOB://kafka:9092,LISTENER_FRED://0.0.0.0:29092 - KAFKA_ADVERTISED_LISTENERS=LISTENER_BOB://kafka:9092,LISTENER_FRED://127.0.0.1:29092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=LISTENER_BOB:PLAINTEXT,LISTENER_FRED:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME=LISTENER_BOB - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 - KAFKA_AUTO_CREATE_TOPICS_ENABLE=false ports: # 仅映射对外提供服务的29092端口,避免9092端口混淆 - 29092:29092 depends_on: - zookeeper volumes: - kafka_data:/var/lib/kafka networks: - app_backend_network
- 重启服务生效:
docker-compose down docker-compose up -d
- 提前创建你需要使用的IIoT消息topic,避免自动创建topic被禁用导致的发送失败:
# 进入Kafka容器执行创建命令,替换<your-topic-name>为实际topic名称 docker exec -it <你的kafka容器名> kafka-topics --create --topic <your-topic-name> --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
- Node-Red中Kafka地址配置为
127.0.0.1:29092即可正常生产消息。
内容的提问来源于stack exchange,提问作者Q.Aimad
相关产品推荐
相关产品推荐

