docker - 无法使用 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,但无济于事。
我确定我遗漏了一些简单的东西:有人可以帮忙吗?
解决方案
所以,我已经解决了这个问题,我现在有一个工作的 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
.
在任一生产者中键入的消息出现在消费者中。
推荐阅读
- xml - XSD 到 XML 转换器
- javascript - Echobot 在 Line 上不起作用(不响应消息)
- c++ - 从文本文件c ++填充对象
- powershell - 有条件地将输出写入文件以跟踪 pourposes
- c# - Uri 方案太长 – AppSettings.config
- database - 从 Oracle 云存储读取数据到目标数据库
- c# - 如何查找 String 中是否有特殊字符?前任 : ” ] ”
- git - 我可以从不同的分支中挑选多个提交吗?
- apache-nifi - 如何使用 Apache Nifi 将数据从 HDFS 传输到 Oracle?
- angular - Angular:将类型字符串返回到 catchError 但具有不同类型的 HTTP