如何从 Docker 外部连接到 dockerized Kafka 集群?

问题描述 投票:0回答:1

我的组织最近从依赖 Zookeeper 的旧版本 Kafka 切换到了可以充当自己的代理的更新版本。不幸的是,这样做,他们破坏了我的工作流程

我有一个小程序,旨在为特定主题生成卡夫卡消息。当我运行该程序的 docker 版本时,它会连接到 kafka 并按预期运行。当我尝试直接从 IDE 运行程序并连接到 dockerized kafka 集群时,我收到一个神秘的“客户端已耗尽可用的代理来与之对话:EOF”错误。 screenshot of the error logs

由于该程序在容器中运行时可以正常工作,因此我认为造成问题的根本原因是存在一些配置差异。此设置不使用 Zookeeper,不幸的是,我可以在网上找到的大多数文献都是关于如何使用Zookeeper 来完成这项工作,这与我们的组织不再相关。

Kafka 容器的 compose 文件:

# KAFKA kafka: <<: *logging image: bitnami/kafka:3.5.1 labels: niche.type: "kafka" container_name: kafka restart: unless-stopped environment: # Tell kafka that it's running in single-node mode KAFKA_CFG_NODE_ID: 0 KAFKA_CFG_PROCESS_ROLES: controller,broker KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://localhost:29092 KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://:9092,EXTERNAL://localhost:29092 KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka:9093 KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false' KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true' KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 networks: - development ports: - 29092:29092 volumes: - type: volume source: kafka3-data target: /bitnami/kafka - type: tmpfs target: /bitname/kafka/tmp
我的程序的 Docker 版本的 compose 块。它主要依赖于默认值

inventory: <<: [ *dns, *logging ] build: context: ./inventory dockerfile: ./cmd/inventory/Dockerfile image: ${USER:?USER}/inventory:latest container_name: inventory env_file: - urls.env - inventory/cmd/inventory/docker.env networks: - development ports: - 4096:4096 depends_on: postgres: condition: service_started kafka: condition: service_healthy
其定义如下:

KAFKA_BROKERS=kafka:9092
我提供从 IDE 中运行我的程序

"args": [ "-kafka.brokers=localhost:29092" ]
我怀疑问题在于我没有以正确的方式访问 Kafka 容器——29092 对于容器来说是正确的,如果我瞄准不同的端口,我会收到“无法连接”错误——但我我不太确定听众是否

//localhost:29092

我认为这可能应该是

docker.host.internal

(指定该端口上来自主机的传入连接),但 Kafka 图像似乎不知道如何解释它。

有什么关于我可能出错的地方的指示吗?此工作流程以前可以通过 Zookeeper 实现,因此我认为这只是一个配置问题,导致其无法按预期工作。在 Windows 上运行,物有所值。

docker apache-kafka configuration
1个回答
0
投票
在这条线上

KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://localhost:29092


listeners

配置(Bitnami图像上的
KAFKA_CFG_LISTENERS
)设置服务器将监听的绑定地址。

当设置为

localhost

 时,它将仅接受内部(相对于容器)连接。

当设置为

0.0.0.0

时,它将接受所有接口上的连接(例如来自主机的连接),并且只有
then才会撰写从主机到容器的端口转发工作。

更多详细信息:

连接到在 Docker 中运行的 Kafka

© www.soinside.com 2019 - 2024. All rights reserved.