【问题标题】:Kafka and zookeeper docker containers talking to my api on the host machineKafka 和 zookeeper docker 容器在主机上与我的 api 对话
【发布时间】:2021-04-02 01:13:07
【问题描述】:

第 1 步:\

我按照this guide 中的一些步骤创建了一个zookeeper 容器并将其连接到一个Kafka 容器,以便它们可以通过本地端口相互通信。我还创建了一个带有 1 个分区的主题“foo”,并在其中使用 docker 命令发送了 42 条消息。据我了解,我的本地操作系统 (localhost:29092) 上有一个 Kafka 端口,用于生产和收听消息。

docker 命令运行 zookeeper 容器:

docker run -d --net=host --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=32181 confluentinc/cp-zookeeper:4.0.0   

docker 命令运行 kafka 容器:

docker run -d --net=host --name=kafka -e KAFKA_ZOOKEEPER_CONNECT=localhost:32181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 confluentinc/cp-kafka:4.0.0

第 2 步:\

接下来,我试图在我的 Springboot 启动 API 中连接我的 Kafka 生产者和消费者脚本,而没有任何 docker-compose 到这个端口,如下所示(我想证明这两个容器是否能够正常工作Kafka 分布在我的主机操作系统上):

public class KafkaProducer {private static final String TOPIC = "foo";...}
public class KafkaConsumer { @KafkaListener(topics = "foo", groupId = "group1")...}

spring.kafka.producer.bootstrap-servers: localhost:29092
spring.kafka.consumer.bootstrap-servers: localhost:29092

因此,我收到以下错误:

2020-12-23 14:38:45.937  WARN 14056 --- [ntainer#0-0-C-1] org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-group1-1, groupId=group1] Connection to node -1 (localhost/127.0.0.1:29092) could not be established. Broker may not be available.
2020-12-23 14:38:45.937  WARN 14056 --- [ntainer#0-0-C-1] org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-group1-1, groupId=group1] Bootstrap broker localhost:29092 (id: -1 rack: null) disconnected.

你能告诉我我做错了什么吗?我对 Java、Kafka 和 Docker 完全陌生。我应该读什么才能更好地理解它?

【问题讨论】:

  • 你是如何启动 Kafka 容器的?您可以直接在主机上运行 Kafka,从而减少使用一种全新的技术吗? (特别是在最初的 Kafka 连接中有一个令人困惑的地方,即服务器告诉客户端连接到哪里,这在混合 Docker/非 Docker 环境中可能会很棘手。)
  • @DavidMaze 运行 zookeeper 容器:docker run -d --net=host --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=32181 confluentinc/cp-zookeeper:4.0.0 运行 kafka 容器:docker run -d --net=host --name=kafka -e KAFKA_ZOOKEEPER_CONNECT=localhost:32181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 confluentinc/cp-kafka:4.0.0 是的,它与我主机上的 kafka_2.13-2.6.0 文件夹完美配合。我知道这是一个令人困惑的结构,我的 api 应该在第三个容器中运行,但我试图了解真正的 Kafka 容器是怎样的。
  • 你的意思是“多么真实”? 1)你不需要使用--net=host,它只能在 Linux 上按预期工作,无论如何 2)请阅读confluent.io/blog/kafka-listeners-explained 3)使用 Compose 会更容易(见博客文章) 4)你为什么想要/需要使用旧版本的 Confluent 平台吗?
  • 4) 您可以阅读页面顶部链接到当前版本的警告;)
  • 在任何情况下,关键是您需要来自容器的广告侦听器,该侦听器公开并返回 Kafka 地址。有了这些信息,您可以在容器内或外运行 spring 应用程序,但您必须使用不同的地址和端口,具体取决于您配置 Kafka 的方式

标签: java docker apache-kafka


【解决方案1】:

由于某种原因,它适用于新版本的指南。

https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 2019-03-13
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多