Docker Compose环境中Kafka Schema Registry无法连接Kafka服务器排查
问题分析与修复方案
核心问题
你的配置里最关键的错误是Kafka的广告监听地址(KAFKA_ADVERTISED_LISTENERS)配置不当,导致Schema Registry无法正确连接到Kafka Broker:
- 当Schema Registry通过
broker:9092请求连接时,Kafka会返回自己的广告地址localhost:29092 - 但在Schema Registry容器内部,
localhost指向容器自身而非broker容器,因此出现连接失败的报错
具体问题点与修复步骤
1. 修正Kafka监听地址配置
需要明确区分容器内部通信和外部主机通信的监听地址:
- 容器内部(Schema Registry与Broker之间)使用容器hostname
broker作为地址 - 外部主机访问使用
localhost
修改Broker的环境变量:
environment: # 明确Kafka需要监听的端口 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:29092,PLAINTEXT_HOST://0.0.0.0:9092 # 广告地址:内部用broker容器名,外部用localhost KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
2. 统一组件版本
Broker使用confluentinc/confluent-local:7.6.0,Schema Registry使用7.6.1,版本不一致可能引发兼容性问题,建议统一为同一版本(比如7.6.1)。
3. 删除冗余配置
KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL是Kafka Connect的配置项,Broker容器不需要,直接删除即可。
修正后的完整Docker Compose配置
version: '3.8' services: broker: image: confluentinc/confluent-local:7.6.1 hostname: broker container_name: broker ports: - "9092:9092" - "9101:9101" environment: KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:29092,PLAINTEXT_HOST://0.0.0.0:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092 schema-registry: image: confluentinc/cp-schema-registry:7.6.1 hostname: schema-registry container_name: schema-registry depends_on: - broker ports: - "8081:8081" environment: SCHEMA_REGISTRY_HOST_NAME: schema-registry SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: 'broker:29092' SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081
内容的提问来源于stack exchange,提问作者Erik83
相关产品推荐
相关产品推荐

