无法从通过intellij运行的spring boot应用程序连接到我在docker上运行的kafka

Posted

技术标签:

【中文标题】无法从通过intellij运行的spring boot应用程序连接到我在docker上运行的kafka【英文标题】:Can't connect to my kafka running on docker from spring boot application running via intellij 【发布时间】:2022-01-04 16:48:43 【问题描述】:

我有一个包含 Kafka、zookeeper 和 spring boot 应用程序的 docker-compose 文件。 当我运行整个文件时,一切正常。 当我在没有 Spring Boot 应用程序的情况下运行它以通过 intellij 对其进行调试时,它无法连接到 Kafka 并且无法正常工作。

我的 docker-compose 文件:

 version: "3.5" services:   # Install Zookeeper.   zookeeper:
    container_name: zookeeper
    image: debezium/zookeeper:1.2
    networks:
      - mynetwork
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888   # Install Kafka.   kafka:
    container_name: kafka
    image: debezium/kafka:1.2
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
      - 29092:29092
    networks:
      - mynetwork
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP= INTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL_SAME_HOST:PLAINTEXT
      - KAFKA_ADVERTISED_LISTENERS= INTERNAL://kafka:9092,EXTERNAL_SAME_HOST://localhost:29092
      - KAFKA_LISTENERS= EXTERNAL_SAME_HOST://:29092,INTERNAL://:9092
      - KAFKA_INTER_BROKER_LISTENER_NAME= PLAINTEXT   # Install Postgres.   postgres:
    container_name: postgres
    image: debezium/postgres:12
    volumes:
      - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - 5432:5432
    networks:
      - mynetwork
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres   kafka-ui:
    container_name: kafka-ui
    image: provectuslabs/kafka-ui:0.2.1
    ports:
      - 8080:8080
    networks:
      - mynetwork
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092   #Deploy a Consumer.   consumer:
    build:
      context: .
    container_name: pledge-consumer
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/postgres
    ports:
      - 8101:8080
    networks:
      - mynetwork
    image: isber/ssm-pledgeservice:v1
    depends_on:
      - zookeeper
      - kafka
      - postgres

networks:   mynetwork:
    external: true

在我尝试过的应用程序中:

spring.kafka.bootstrap-servers=kafka:9092

当我通过 docker 运行它而不是从 intellij 运行它时有效

我也试过用intellij运行时:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.bootstrap-servers=localhost:29092

【问题讨论】:

【参考方案1】:

我发现问题了,我用的图:

image: debezium/kafka:1.2

有一个问题,它没有读取我添加的环境的任何参数。 我升级到:

image: debezium/kafka:1.4

一切正常。

【讨论】:

以上是关于无法从通过intellij运行的spring boot应用程序连接到我在docker上运行的kafka的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot无法使用intellij idea启动应用程序

从 IntelliJ 启动时无法激活 Spring 引导配置文件

当 spring-boot 运行时 IntelliJ 进程以退出代码 0 完成

从 IntelliJ Idea 运行/调试 Spring Boot 应用程序

如何从 IntelliJ 运行/部署 Spring Boot 微服务到本地 Kubernetes 集群?

无法在 IntelliJ Idea 中启动 spring-boot 应用程序