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

配置带Schema Registry的Docker Compose Kafka Connect CDC环境遇连接错误求助

解决Schema Registry连接Kafka容器失败的问题

核心问题

你的Schema Registry未配置正确的Kafka Broker地址,导致它默认尝试连接localhost:29092,但Kafka运行在独立Docker容器中,容器内无法通过localhost访问到Kafka服务。

修正后的配置方案

1. 更新Schema Registry配置

修改docker-compose中schema-registry的环境变量,明确指定Kafka Broker的容器内访问地址:

schema-registry:
  image: confluentinc/cp-schema-registry:5.5.3
  environment:
    - SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=kafka:9092  # 指向Kafka容器的服务名和内部端口
    - SCHEMA_REGISTRY_HOST_NAME=schema-registry
    - SCHEMA_REGISTRY_LISTENERS=http://schema-registry:8081,http://localhost:8081
  ports:
    - 8081:8081
  depends_on: [zookeeper, kafka]

2. 确保Kafka容器的广告监听配置正确

Kafka需要配置KAFKA_ADVERTISED_LISTENERS,让容器内服务(如Schema Registry、Debezium Connect)能通过容器名访问它:

kafka:
  image: confluentinc/cp-kafka:5.5.3
  environment:
    - 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
  ports:
    - 29092:29092
  depends_on: [zookeeper]

关键参数说明

  • SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: 指定Schema Registry存储元数据的Kafka Broker地址,Docker容器间可通过服务名kafka直接通信,内部端口用9092而非外部映射的29092。
  • KAFKA_ADVERTISED_LISTENERS: 定义Kafka对外暴露的访问地址,PLAINTEXT://kafka:9092供容器内服务使用,PLAINTEXT_HOST://localhost:29092供外部客户端访问。

验证方法

容器启动后,执行以下命令测试Schema Registry状态:

curl http://localhost:8081/subjects

返回空数组[]即表示Schema Registry已成功连接Kafka并正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:20:19