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

Posted

技术标签:

【中文标题】无法从 docker 中运行的服务向 kafka 生成消息【英文标题】:Cannot produce message to kafka from service running in docker 【发布时间】:2016-12-07 13:12:19 【问题描述】:

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

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

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.

有人可以指出实际问题出在哪里吗?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于无法从 docker 中运行的服务向 kafka 生成消息的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Docker - 无法从 docker 容器外部生产或消费

无法在 kafka connect docker 映像中运行 kafka connect datagen

在 dockerized 环境中无法从 Flask 连接到 Kafka

避免Kafka客户端无法连接Docker上运行的Kafka,又名:Docker如何添加hosts映射

Kafka Connect MySQL“无法识别服务器时区值‘EDT’”

我的 kafka docker 容器无法连接到我的 zookeeper docker 容器