配置带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
相关产品推荐
相关产品推荐

