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

Zei*_*man 5 apache-kafka docker kafka-producer-api

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

.\bin\windows\kafka-server-start.bat .\config\server.properties
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我正在使用 docker 运行 kafkacat

docker run -it --network="host" --name="producer" confluentinc/cp-kafkacat bash
Run Code Online (Sandbox Code Playgroud)

当我跑

 kafkacat -b host.docker.internal:9092 -C -t test
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

% 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)
Run Code Online (Sandbox Code Playgroud)

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

当我做

kafkacat -b host.docker.internal:9092 -t test -L
Run Code Online (Sandbox Code Playgroud)

我得到

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
Run Code Online (Sandbox Code Playgroud)

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

我下载了最新版本的 Kafka:kafka-2.4 Machine is Windows 10 Docker for Windows running using Linux containers

cri*_*007 5

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

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

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

1 brokers:
  broker 0 at host.docker.internal:9092
Run Code Online (Sandbox Code Playgroud)

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

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