【问题标题】:How to communicate with Kafka server running inside a docker如何与在 docker 内运行的 Kafka 服务器通信
【发布时间】:2017-06-25 08:58:04
【问题描述】:

我在我的 Scala 应用程序中使用 apache KafkaConsumer 与 Kafka 服务器通信,其中 Kafka 和 Zookeeper 服务在我的 VM 上的 docker 容器中运行(scala 应用程序也在此 VM 上运行)。我已将 KafkaConsumer 的属性“bootstrap.servers”设置为使用 127.0.0.1:9092。

KafkaConsumer 确实记录了“将组 queuemanager_testGroup 的协调器请求发送到代理 127.0.0.1:9092”。问题似乎是 Kafka 客户端代码正在根据它收到的响应设置协调器值,其中包含 responseBody={error_code=0,coordinator={node_id=0,host=e7059f0f6580 ,port=9092}} ,这就是它为将来的连接设置主机的方式。随后它抱怨它无法解析地址:e7059f0f6580

地址 e7059f0f6580 是该 docker 容器的容器 ID。 我已经使用 telnet 进行了测试,我的 VM 没有将其检测为主机名。

我需要更改什么设置,以便我的 docker 上的 Kafka 在其响应中返回 localhost/127.0.0.1 作为主机?或者还有其他我遗漏/做错的事情吗?

【问题讨论】:

  • 嗯......更相关的问题是 - “你如何运行容器化的 kafka 服务”。 Kafka 需要 zookeeper 才能工作。通常人们使用 docker-compose 来运行依赖容器。所以……你需要提供你的 Dockerfile、docker-compose.yaml 或者启动这些容器的命令。
  • 还有一件事...请花一些时间来了解 docker 的一些更简单的东西,例如 hello-world Web 应用程序。一旦你明白了,你就会明白这个问题的答案。

标签: networking docker apache-kafka


【解决方案1】:

更新

advertised.host.name 已弃用,--override 应避免使用。

添加/编辑advertised.listeners成为

的格式
[PROTOCOL]://[EXTERNAL.HOST.NAME]:[PORT]

还要确保PORT 也列在listeners 的属性中


在连续数小时调查此问题后,发现有一种方法可以解决 在启动 Kafka 服务器时设置主机名,如下所示: kafka-server-start.sh --override advertised.host.name=xxx(在我的例子中:localhost)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多