docker - 无法从 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)
这只发生在我尝试在本地消费时,但当我使用远程服务器时它工作正常。
解决方案
使用MyKafka:9092
解决了我的问题。
推荐阅读
- php - 如何在字符串中查找字母并显示完整的单词
- javascript - ramda js 用 find 组合,用修剪值选择
- jquery - jQuery ScrollTop 在 iOS 上不起作用
- java - java.lang.IllegalArgumentException:没有为 id 0x7f0d00c4 找到视图
- python - Python树莓派串口sim868登录不正确
- javascript - ThreeJs 对象裁剪
- android-studio - onClick 按钮到另一个活动崩溃模拟器
- git - 分离头的合并使更改丢失
- nlp - 使用 NLP 对知识库文章进行问答
- sql - SQL 命令未正确结束错误;尝试使用连接更新信息