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

Cannot produce message to kafka from service running in docker

我在端口 5000 上的 docker 容器中有一个休息服务 运行,用于从 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,但我认为您最好正确配置广告主机名。