【发布时间】:2020-05-31 22:45:17
【问题描述】:
我在 Docker 容器中运行 Kafka 代理时遇到问题。
我已经下载并解压了 Kafka 2.12-2.4.1 的 tar 存档。
我可以从命令行运行 Zookeeper 和 Kafka 代理,成功地生产和消费消息。当我使用 Zookeeper 构建 docker 容器时,我可以使用从命令行运行的 Kafka 代理运行它,再次成功生成和使用消息。当我将代理放入 docker 容器时,消费者和生产者找不到要连接的代理。
我已经检查以确保 Zookeeper 有一个连接的代理:下面的 zookeeper “dump”命令
回声转储 | nc 本地主机 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
当我运行命令时
netstat -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.网络客户端)
这似乎表明客户无法联系经纪人。
我在代理配置文件中尝试了几种不同的监听器和广告监听器,将它们设置为 localhost 和 127.0.0.1,但无济于事。
我确定我遗漏了一些简单的东西:有人可以帮忙吗?
【问题讨论】:
-
不是很清楚,你有 2 个容器,你尝试使用 localhost 作为地址从一个容器连接到另一个容器吗?
-
您是否正在构建自己的 Docker 容器以供自己学习?因为如果你想做的只是在 Docker 上运行 Kafka + Zookeeper,那么已经存在非常好的工具:hub.docker.com/r/confluentinc/cp-kafka
-
还有你从哪里运行你的消费者?您的主机,还是其他 Docker 容器?
-
我有两个容器,我正在尝试从一个容器连接到另一个容器,我将其作为一个学习练习,并且我正在从我的主机运行消费者 - 尽管我尝试运行它来自另一个 Docker 容器,结果相同。
-
为了进一步解释,我有两个容器,一个运行 Zookeeper,另一个运行代理。
标签: docker apache-kafka kafka-consumer-api