本地Docker部署KSQL时连接ksqldb-server遭拒绝的解决求助
解决KSQL CLI连接服务器被拒绝的问题
以下是针对你遇到的连接拒绝问题的具体修复方案:
1. 补充ZooKeeper服务配置
你的Kafka服务依赖ZooKeeper,但原配置中未定义该服务,这会导致Kafka无法正常启动。需添加完整的ZooKeeper服务:
zookeeper: image: confluentinc/cp-zookeeper:latest container_name: mvtds-transformer-zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000
2. 修正KSQL Server的Kafka Bootstrap地址
Kafka内部监听端口为29092(通过KAFKA_ADVERTISED_LISTENERS配置的PLAINTEXT://kafka:29092),但KSQL Server当前配置的KSQL_BOOTSTRAP_SERVERS使用了kafka:9092,这会导致KSQL Server无法连接到Kafka。修改为:
KSQL_BOOTSTRAP_SERVERS: kafka:29092
3. 修正Kafka的卷映射配置
当前Kafka卷映射指向/var/run/docker.sock是错误的,会干扰Kafka的数据存储逻辑。应改为Kafka官方指定的数据目录:
volumes: - kafka-data:/var/lib/kafka/data
4. 添加健康检查确保Kafka就绪后再启动KSQL Server
depends_on仅等待容器启动,不会检查服务是否真正就绪。添加健康检查可避免KSQL Server在Kafka未完全启动时尝试连接:
给Kafka服务添加健康检查:
kafka: # ... 其他配置 ... healthcheck: test: ["CMD", "kafka-topics", "--list", "--bootstrap-server", "localhost:9092"] interval: 10s timeout: 5s retries: 5
修改KSQL Server的依赖条件:
ksqldb-server: # ... 其他配置 ... depends_on: kafka: condition: service_healthy
5. 验证修复效果
- 重启所有容器:
docker-compose down && docker-compose up -d
- 查看KSQL Server日志,确认其已成功连接Kafka并启动:
docker logs ksqldb-server
- 再次尝试CLI连接:
docker exec -it ksqldb-cli ksql http://ksqldb-server:8088
完整修正后的docker-compose配置示例
version: '3.8' volumes: kafka-data: services: zookeeper: image: confluentinc/cp-zookeeper:latest container_name: mvtds-transformer-zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-kafka:latest container_name: mvtds-transformer-kafka depends_on: - zookeeper ports: - "9092:9092" environment: KAFKA_BROKER_ID: 1 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 volumes: - kafka-data:/var/lib/kafka/data healthcheck: test: ["CMD", "kafka-topics", "--list", "--bootstrap-server", "localhost:9092"] interval: 10s timeout: 5s retries: 5 ksqldb-server: image: confluentinc/ksqldb-server:0.28.2 hostname: ksqldb-server container_name: ksqldb-server depends_on: kafka: condition: service_healthy ports: - "8088:8088" environment: KSQL_LISTENERS: http://0.0.0.0:8088 KSQL_BOOTSTRAP_SERVERS: kafka:29092 KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true" KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true" ksqldb-cli: image: confluentinc/ksqldb-cli:0.28.2 container_name: ksqldb-cli depends_on: - ksqldb-server entrypoint: /bin/sh tty: true
内容的提问来源于stack exchange,提问作者Yingjie Guan
相关产品推荐
相关产品推荐

