带有 Kafka 的 Docker 集群无法与客户端容器建立连接

Posted

技术标签:

【中文标题】带有 Kafka 的 Docker 集群无法与客户端容器建立连接【英文标题】:Docker Cluster with Kafka can't establish a connection with a client container 【发布时间】:2022-01-11 06:54:43 【问题描述】:

我从客户端应用程序收到以下错误消息:

无法建立与节点 1002 (/127.0.0.1:9092) 的连接。经纪人可能不可用。

节点 1002 是正确的代理 id,这意味着它能够找到它,但我不明白为什么当客户端应用程序不在容器上运行时,连接本身无法建立。

Docker 编写

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
    depends_on:
      - zookeeper

  app:
    image: someuser/someimage
    ports:
     - "8080:8080"
    environment:
       KAFKA_CONNECTION: kafka:9092
    depends_on:
      - kafka

application.yml

spring:
  kafka:
    consumer:
      group-id: tdp-loggers
      auto-offset-reset: earliest
    bootstrap-servers: $KAFKA_CONNECTION

tdp:
  topic-name: advice-topic
  messages-per-request: 10

Dockerfile

FROM openjdk:17

WORKDIR /app

EXPOSE 8080

COPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offline

COPY src ./src

CMD ["./mvnw", "spring-boot:run"]

【问题讨论】:

尝试将 KAFKA_ADVERTISED_HOST_NAME 设置为容器的名称 (kafka)。 【参考方案1】:

@Turing85 发布了答案,我不得不更改

KAFKA_ADVERTISED_HOSTNAME

从静态 IP 地址 127.0.0.1 到 kafka 的变量。

【讨论】:

我没有发布答案,我请求您尝试一下,因为我不确定它是否能解决问题...

以上是关于带有 Kafka 的 Docker 集群无法与客户端容器建立连接的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes 集群上的 Kafka 与 Istio

Kafka集群部署(Docker容器的方式)

使用 cp-kafka-connect-base 为 snowflake-kafka-connector 构建一个组合的 docker 映像,以部署在 kafka connect 集群上

Docker搭建kafka集群

实操docker搭建kafka集群及与PHP的整合

Mac 使用 docker 搭建 kafka 集群 + Zookeeper + kafka-manager