无法从 docker 中的 Kafkacat 运行 连接到本地 windows 机器上的 Kafka 代理 运行

Cannot Connect from Kafkacat running in docker to Kafka broker running locally on windows machine

我在 windows 机器上本地 运行ning kafka。我 运行ning kafka 的方式是使用

.\bin\windows\kafka-server-start.bat .\config\server.properties

server.properties 是:

listeners=Listener_BOB://:29092,Listener_Kafkacat://127.0.0.1:9092
advertised.listeners=Listener_BOB://:29092,Listener_Kafkacat://127.0.0.1:9092
listener.security.protocol.map=Listener_BOB:PLAINTEXT,Listener_Kafkacat:PLAINTEXT
inter.broker.listener.name=Listener_BOB

我在运行宁卡夫卡猫使用docker

docker run -it --network="host" --name="producer" confluentinc/cp-kafkacat bash

当我运行

 kafkacat -b host.docker.internal:9092 -C -t test

我收到错误消息:

% ERROR: Local: Broker transport failure: 127.0.0.1:9092/0: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)

我知道我可以 运行 Kafka in docker 但我想知道为什么我无法连接到代理并生成或使用消息。我尝试了不同的方法并试图了解听众在做什么,但我无法理解为什么这不起作用。

当我做

kafkacat -b host.docker.internal:9092 -t test -L

我明白了

1 brokers:
  broker 0 at 127.0.0.1:9092
 1 topics:
  topic "test" with 1 partitions:
    partition 0, leader 0, replicas: 0, isrs: 0

也许有人可以解释我做错了什么或者告诉我为什么这是不可能的。

我下载了最新版本的Kafka:kafka-2.4 机器是 Windows 10 Docker 对于 Windows 运行 使用 Linux 容器

您需要将 host.docker.internal:9092 设置为广告侦听器。不是本地主机/127.0.0.1

这是客户端在尝试连接时将返回的地址

当你这样做时,你应该能够看到这个

1 brokers:
  broker 0 at host.docker.internal:9092

否则,如您所知,bootstrap 连接有效,但广告地址将是 127.0.0.1 以到达该特定代理,这显然不起作用,因为那将是 kafkacat容器本身

注意:--network="host" 不会在 Linux 主机之外执行您期望的操作,因此最好将其删除