首页 > 解决方案 > 无法从 dockerized .Net Core 应用程序中使用 Kafka

问题描述

我在带有 linux 容器的 Windows Docker Desktop 上本地运行。

我使用以下命令创建了一个 zookeeper 容器:

docker run -d --network kafka --name=MyZookeeper -p 2181:2181 -e ALLOW_ANONYMOUS_LOGIN=yes -e ZOOKEEPER_CLIENT_PORT=2181 confluentinc/cp-zookeeper:5.5.0 

以及使用此命令的 Kafka 容器:

docker run -d --network kafka --name=MyKafka -p 9092:9092 -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_ZOOKEEPER_CONNECT=MyZookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 confluentinc/cp-kafka:5.5.0 

我有一个非 dockerized .Net 核心应用程序,它将消息发布到我的 Kafka 中的特定主题。发布过程运行良好,我已经能够使用 Conduktor 进行验证。

问题是当我尝试从我也在本地运行的 dockerized 应用程序中使用这些数据时。这是 docker-compose.yml 文件内容:

version: '1.0'

services:
  api:
    image: ${DOCKER_REGISTRY}cds.Test.api
    ports:
      - "64788:64788"
      - "64789:64789"
    build:
      context: .
      dockerfile: src/Api/Dockerfile.Debug
    environment:
      - ASPNETCORE_URLS=http://+:64788
      - ASPNETCORE_HTTP_PORT=64788
      - MANAGEMENT_HTTP_PORT=64789
      - ASPNETCORE_ENVIRONMENT=Local
networks:
  default:
    external:
      name: kafka

在我的 appsetting.local.json 文件中,我有:

"consumerOptions": {
    "BootstrapServers": "localhost:9092",
    "GroupId": "GroupId",
    "TopicName": "my_topic,
    "EnableAutoCommit": true,
    "AutoOffsetReset": "Latest",
    "MaxPollIntervalMs": 120000,
    "StatisticsIntervalMs": 1000
  }

然后使用这个配置我建立了一个 kafka 消费者。但问题是每当我启动我的 dockerized 应用程序时,我都会收到以下错误:

%3|1618587835.523|FAIL|rdkafka#consumer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT, 66 identical error(s) suppressed)

这只发生在我尝试在本地消费时,但当我使用远程服务器时它工作正常。

标签: docker.net-coreapache-kafkadocker-compose

解决方案


使用MyKafka:9092解决了我的问题。


推荐阅读