繁体   English   中英

Spring 应用程序在同一个集群内运行时无法连接到 Kafka,但在从集群外运行时可以工作

[英]Spring Application cannot connect to Kafka when it's run inside of the same cluster, but works when it runs from outside cluster

Spring 应用程序在我的机器上本地运行并通过 docker 访问 Kafka 时工作正常,但是当我将 Spring 应用程序添加为集群内的容器时它不起作用。 我收到错误消息:“无法建立到节点 -1 (localhost/127.0.0.1:9092) 的连接。代理可能不可用”

下面列出的是 docker-compose、dockerfile 和 spring 应用程序的 application.properties。

docker-compose.yml

version: "3"

services:
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:latest'
    ports:
      - '9092:9092'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_LISTENERS=PLAINTEXT://:9092
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper
  app:
    image: 'someuser/imagename'
    ports:
      - '8080:8080'
    depends_on:
      - kafka

应用程序.properties

server.port = 8080
spring.kafka.consumer.bootstrap.servers=localhost:9092
spring.kafka.consumer.group-id=mygroup 
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consume.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

spring.kafka.producer.bootstrap-servers=localhost:9092
spring.kafka.producer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.producer.value-deserialzier=org.apache.kafka.common.serialization.StringDeserializer

Dockerfile

FROM openjdk:17

WORKDIR /app

EXPOSE 8080
EXPOSE 9092

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

COPY src ./src

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

使用 spring.kafka.producer.bootstrap-servers=localhost:9092 和 spring.kafka.consumer.bootstrap.servers=localhost:9092 您的应用程序在技术上是部署在端口 9 上的,而不是部署在端口 9 上的自己的容器。

如果您将 localhost:9092 更改为 kafka:9092 它应该可以工作( https://docs.docker.com/compose/networking/ )。 (本地不会,但通过 docker 部署时应该连接)

尝试为本地和 docker 部署设置不同的应用程序配置文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM