You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Maven Install时出现Kafka bootstrap.servers不可解析错误求助

问题:Spring Boot微服务Docker构建Jar包时Kafka连接错误

执行maven install时触发如下错误:

Caused by: org.apache.kafka.common.config.ConfigException: No resolvable bootstrap urls given in bootstrap.servers
at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:89) ~[kafka-clients-3.1.1.jar:na]
at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:48) ~[kafka-clients-3.1.1.jar:na]
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:730) ~[kafka-clients-3.1.1.jar:na]

相关配置文件

docker-compose.yml

version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    restart: always
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - 2181:2181
    networks:
      - app-network

  kafka:
    image: confluentinc/cp-kafka:latest
    container_name: kafka
    restart: always
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    networks:
      - app-network

  mongodb:
    image: mongo:latest
    restart: always
    container_name: mongodb
    networks:
      - app-network
    ports:
      - 27017:27017

  matching-engine-helper:
    image: matching-engine-helper:latest
    restart: always
    container_name: "matching-engine-helper"
    networks:
      - app-network
    ports:
      - 9192:9192
    depends_on:
      - mongodb
      - zookeeper
      - kafka

  matching-engine-core:
    image: matching-engine-core:latest
    restart: always
    container_name: "matching-engine-core"
    networks:
      - app-network
    ports:
      - 9191:9191
    depends_on:
      - matching-engine-helper
      - zookeeper
      - kafka
      - mongodb

networks:
  app-network:
    driver: bridge

application.yml

spring:
  data:
    mongodb:
      database: matching-engine-mongodb
      host: mongodb
      port: 27017
  kafka:
    bootstrap-servers: kafka:9092
server:
  port: 9192

本地运行正常,但Docker容器内执行构建Jar包失败,询问是否需要配置环境变量。


解答

问题根源

错误本质是构建阶段(maven install)Spring Boot尝试初始化Kafka客户端,但此时docker-compose中的Kafka服务还未启动——maven install是编译构建环节,而Kafka容器是应用运行时才会启动的服务,构建阶段根本无法解析kafka:9092这个地址。如果是在独立Docker容器内执行构建,该容器甚至不在app-network网络中,更无法访问Kafka服务。

具体解决方案

  1. 跳过构建阶段的测试执行
    如果maven install时触发了单元/集成测试,而这些测试会初始化Kafka客户端,直接跳过测试即可:

    mvn install -DskipTests
    

    或者在pom.xml中配置默认跳过测试,仅在需要时手动执行。

  2. 用环境变量动态配置Kafka地址
    修改application.yml,给Kafka地址添加环境变量占位符,让构建阶段可以临时覆盖配置:

    spring:
      kafka:
        bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:kafka:9092}
    

    构建时设置临时环境变量,比如用一个格式合法但无需实际连接的地址:

    KAFKA_BOOTSTRAP_SERVERS=localhost:9092 mvn install
    
  3. 用Testcontainers处理集成测试
    如果必须在构建阶段运行集成测试,使用Testcontainers自动启动临时Kafka容器,确保测试时能连接到可用的Kafka服务,避免配置解析错误。

  4. 将构建容器加入app-network
    如果是在Docker容器内执行构建,把该容器加入docker-compose定义的app-network,这样kafka:9092就能正常解析:

    docker run --network=app-network -v $(pwd):/app maven:latest mvn install -f /app/pom.xml
    

总结

不需要额外配置永久环境变量,但需要调整构建流程:要么跳过测试,要么用环境变量占位符规避构建时的Kafka连接,要么用测试容器处理测试场景。


内容的提问来源于stack exchange,提问作者Manzoor Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:50:43