[英]Why Can't I Connect to Kafka?
我正在尝试使用 docker 来部署我的应用程序,我编写了以下 docker-compose。 这是我做的 docker-compose.yml:
version: "3"
services:
web:
image: lis
build:
context: ./
dockerfile: Dockerfile.development
volumes:
- ./:/app:z
ports:
- "3000:3000"
# We need build for migrations
command: npm run build
# Run migrations
# Start development environment
command: npm run start:dev
depends_on:
- "kafka"
- "redis"
- "zookeeper"
redis:
image: redis:6.2.6
volumes:
- lis-local-redis:/data
# again, for local debugging purpose (using redis-cli in local)
ports:
- "6379:6379"
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
kafka:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka_ui:
image: provectuslabs/kafka-ui:master
depends_on:
- kafka
ports:
- 8080:8080
environment:
KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
volumes:
lis-local-redis:
我运行 docker-compose up -d,但是,我收到以下错误:
ERROR [Connection] Connection error: connect ECONNREFUSED 127.0.0.1:29092 {\"timestamp\":\"2021-11-30T02:14:08.389Z\",\"logger\":\"kafkajs\",\"broker\":\"localhost:29092\",\"clientId\":\"nestjs-consumer-server\",\"stack\":\"Error: connect ECONNREFUSED 127.0.0.1:29092\\n at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16)\"}"}
notification-center-web-1 | {"level":"error","message":"ERROR [BrokerPool] Failed to connect to seed broker, trying another broker from the list: Connection error: connect ECONNREFUSED 127.0.0.1:29092 {\"timestamp\":\"2021-11-30T02:14:08.389Z\",\"logger\":\"kafkajs\",\"retryCount\":1,\"retryTime\":624}"}
我尝试了不同的端口,但仍然无法工作。 我想知道如何连接我的 web 应用程序和卡夫卡,以便我可以发送有关主题的消息。 localhost:8080 (kafka_ui) 可以工作,说明CLUSTERS在线。
请帮忙
您必须连接到主机名“kafka”,因为这是您的容器名称。 这就是网络与 docker-compose 一起工作的方式。
在这种情况下,本地主机将引用每个容器自己的本地主机。 将容器视为有关网络的单独主机。
由于您没有使用 localhost,因此您还需要将端口更改为 9092。
附带说明:如果您有外部服务,您还可以使用外部 IP(例如 192.168.0.123)端口 29092。 这是因为您在 docker-compose 中使用“ports”关键字暴露了 localhost:29092 端口。
tldr:将连接字符串从 localhost:29092 更改为 kafka:9092
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.