Spring Boot应用无法连接Docker Compose部署的Kafka集群求助
问题分析与解决方案
首先看你的docker-compose.yml,最直接的错误是Spring Boot应用的Kafka地址拼写错误:
在my-app服务的环境变量中,BOOTSTRAP_SERVERS=kafka1:9092,但你的Kafka服务名称是kafka-1,正确配置应为BOOTSTRAP_SERVERS=kafka-1:9092。Docker网络中服务名是节点唯一标识符,拼写错误会导致应用无法定位到Kafka节点,这是连接失败的核心原因。
另外还有几个优化点,避免后续出现其他问题:
- Kafka就绪等待:
depends_on仅保证容器启动顺序,不代表Kafka服务已完全就绪。可以给my-app添加启动等待逻辑,比如用wait-for-it.sh脚本,或在应用启动前检查Kafka 9092端口是否可用。 - Schema Registry配置修正:Schema Registry的
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS里的PLAINTEXT_INTERNAL://localhost:19092无效,因为你的Kafka未定义PLAINTEXT_INTERNAL监听,应改为与Kafka一致的PLAINTEXT_HOST://localhost:19092,或直接去掉该部分,仅保留PLAINTEXT://kafka-1:9092。
修正后的关键配置片段
my-app服务环境变量
my-app: container_name: my-app build: . depends_on: - kafka-1 environment: - SERVER_PORT=8080 - BOOTSTRAP_SERVERS=kafka-1:9092 # 修正服务名拼写 - SCHEMA_REGISTRY_URL=http://schema-registry:8081 - AVRO_SUBJECT_VERSION=latest - CACHE_MAX_SIZE_BUFFERING=0 ports: - "9898:8080" networks: - ams_net
Schema Registry配置
schema-registry: # ... 其他配置不变 environment: # ... 其他配置不变 SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka-1:9092,PLAINTEXT_HOST://localhost:19092 # ... 其他配置不变
最后重启Docker Compose服务:
docker-compose down && docker-compose up --build
内容的提问来源于stack exchange,提问作者geno
相关产品推荐
相关产品推荐

