繁体   English   中英

为什么我无法连接到 Kafka?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM