java - 无法从在 docker 中运行的服务向 kafka 生成消息

标签 java docker apache-kafka kafka-producer-api

我有一个在端口 5000 上的 docker 容器中运行的 rest 服务,用于通过 docker 容器运行的 kafka 主题生成消息。

我已使用以下属性配置我的生产者客户端:-

bootstrap.servers=localhost:9093

我已经用下面的命令开始了我的容器:-

docker run -d -p 127.0.0.1:5000:5000 <contained id>

我还做了以下配置来宣传kafka主机和端口

advertised.host.name=localhost
advertised.port=9093

尽管在我尝试生成 kafka 主题时进行了所有配置,但仍出现以下错误:-

org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

谁能指出实际问题出在哪里?

最佳答案

在现实生活中,advertised.host.name 永远不应该是 localhost

在您的情况下,您在桥接网络模式下运行 Docker 容器,因此它将无法通过 localhost 访问代理,因为它将指向容器网络,而不是主机机器。

要使其正常工作,您应该将 advertised.host.namebootstrap.servers 设置为 ifconfig docker0 返回的 IP 地址(在你的情况下可能不是 docker0 但你明白了)。

或者,您可以使用 --net=host 运行您的容器,但我认为您最好正确配置公布的主机名。

关于java - 无法从在 docker 中运行的服务向 kafka 生成消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716065/

相关文章:

java - Java 中的构造函数保证了哪些属性?

java - 使用 Android 从 Facebook 获取信息

java - 如何用构造函数外部的参数实例化一个类?

java - 如何在 Docker 中对 Web 应用程序进行分区

apache-kafka - Kafka Connect REST接口(interface) "PUT/connectors/(string: name)/config"返回错误代码500

java - 将更改从 Bitbucket 更新到 Eclipse 中的本地 git 存储库?

macos - mac上的Docker : How to auto restart daemon processes after a machine reboot?

docker - 远程访问Kubernetes入口

apache-kafka - 你怎么知道一个主题是什么时候在 Kafka 代理上创建的?

java - Kafka创建大量分区(64k)的Topic失败