首页 > 解决方案 > 无法使用 Docker 容器内的 Kafka 代理运行控制台使用者

问题描述

我在 Docker 容器中运行 Kafka 代理时遇到问题。

我已经下载并解压了 Kafka 2.12-2.4.1 的 tar 存档。

我可以从命令行运行 Zookeeper 和 Kafka 代理,成功地生产和消费消息。当我使用 Zookeeper 构建 docker 容器时,我可以使用从命令行运行的 Kafka 代理运行它,再次成功生成和使用消息。当我将代理放入 docker 容器时,消费者和生产者找不到要连接的代理。

我已经检查以确保 Zookeeper 有一个连接的代理:下面的 zookeeper "dump" 命令

回声转储 | 数控本地主机 2181

返回

会话跟踪器转储:
会话集 (3)/(1):
0 于 2020 年 5 月 28 日星期四 09:53:33 GMT 到期:
0 于 2020 年 5 月 28 日星期四 09:53:36 GMT 到期:
1 将于 2020 年 5 月 28 日星期四 09:53:39 GMT 到期:
    0x10002dfed700008
临时节点转储:
与 Ephemerals 的会话(1):
0x10002dfed700008:
    /控制器
    /brokers/ids/0
连接转储:
连接套件 (2)/(2):
0 于 2020 年 5 月 28 日星期四 09:53:37 GMT 到期:
2 将于 2020 年 5 月 28 日星期四 09:53:47 GMT 到期:
    ip: /172.18.0.1:55656 sessionId: 0x0
    ip: /172.18.0.5:48474 sessionId: 0x10002dfed700008

在我未经训练的眼里,这看起来就像 Zookeeper 有一个注册经纪人。

我可以使用命令成功列出主题

kafka-topics.sh --list --zookeeper localhost:2181

当我运行命令时

网络统计-plnt

我可以看到我在端口 2181 和 9092 上有监听器,如下所示

tcp6 0 0 :::9092 :::* LISTEN 54661/docker-proxy
tcp6 0 0 :::2181 :::* LISTEN 47872/docker-proxy

但是,当我尝试使用命令连接消费者时

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic aaaa

我收到错误

WARN [Consumer clientId=consumer-console-consumer-8228-1, groupId=console-consumer-8228] 引导代理 localhost:9092 (id: -1 rack: null) 已断开连接 (org.apache.kafka.clients.NetworkClient)

这似乎表明客户无法联系经纪人。

我在代理配置文件中尝试了几种不同的监听器和广告监听器,将它们设置为 localhost 和 127.0.0.1,但无济于事。

我确定我遗漏了一些简单的东西:有人可以帮忙吗?

标签: dockerapache-kafkakafka-consumer-api

解决方案


所以,我已经解决了这个问题,我现在有一个工作的 Docker/Kafka 环境:我有一个 Zookeeper、一个代理和一个在 docker 中运行的消费者,我可以从在 docker 中运行的生产者和从 docker 中运行的消费者生成消息命令行。

正如@GiorgosMyrianthous 所怀疑的那样,问题出在听众和广告听众身上。我在 Kafka 代理属性文件中输入了以下值

listeners=PLAINTEXT://:29092,PLAINTEXT_HOST://:9092 advertised.listeners=PLAINTEXT://server:29092,PLAINTEXT_HOST://localhost:9092 listener.security.protocol.map=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT

我启动了9092端口的容器,暴露在外面。

我在引导服务器设置为server:29092.

我运行 Docker 生产者,并将引导服务器设置为server:29092.

我在引导服务器设置为localhost:9092.

在任一生产者中键入的消息出现在消费者中。


推荐阅读