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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:37:18