KSQLDB 独立部署返回错误"Connection could not be established. Broker may not be available"



broker/docker compose.yml

---
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:6.0.1
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
broker:
image: confluentinc/cp-enterprise-kafka:6.0.1
hostname: broker
container_name: broker
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

ksql/doker-compose.yml

---
version: '2'
services:
ksqldb-server:
image: confluentinc/ksqldb-server:0.14.0
volumes:
- ./my_quiries/select.sql:/opt/my_quiries/select.sql
hostname: ksqldb-server
container_name: ksqldb-server
ports:
- "8088:8088"
environment:
KSQL_LISTENERS: http://0.0.0.0:8088
KSQL_BOOTSTRAP_SERVERS: localhost:29092
KSQL_KSQL_SERVICE_ID: demo_app
KSQL_KSQL_QUERIES_FILE: /opt/my_quiries/select.sql
KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"

我想以分布式方式运行Ksqldb(StandAlone(。所以我试着从不同linux机器的单个compose文件中运行broker和ksqldb,一个是wsl2,另一个是linuxvm。但是我在运行ksqldb compose文件时遇到了这个错误

[2021-01-06 03:17:51522]WARN[AdminClient clientId=AdminClient-1]无法建立到节点-1(localhost/120.0.1:29092(的连接。Broker可能不可用。(org.apache.kafka.clients.NetworkClient:780(

当我的代理在localhost:29092端口上成功运行时。

在ksql中使用localhost并不是访问主机(它只是容器本身的localhost(。您需要提供docker主机IP(在linux上时(,或者您可以使用host.docker.internal

另一种选择是只使用docker网络,但使用两个独立的docker组合文件将产生两个网络(如果我没有错的话,broker_defaultksql_default(。因此,ksql无法连接到您的代理,因为它在自己的网络中是孤立的。你可以用以下方法来解决这个问题:

  • 创建一些共享网络,如docker network create shared_network
  • 在你的docker compose文件中,将这个网络添加到ksqldb和kafka中,以便能够通信

ksql:

version: '2'
services:
ksqldb-server:
...
networks:
- shared_network
networks:
shared_network:
external: true

经纪人:

services:
zookeeper:
...
networks:
- internal
broker:
...
networks:
- internal
- shared_network
networks:
internal:
shared_network:
external: true

我想以分布式方式运行Ksqldb(StandAlone(。

这不是使用单个Compose文件的正当理由。如果要扩展服务,您可以在一个文件中使用不同服务块的多个副本,也可以使用Swarm/Kubernetes来扩展服务的运行副本数。

正如另一个答案所示,KSQL_BOOTSTRAP_SERVERS: localhost:29092应该是KSQL_BOOTSTRAP_SERVERS: broker:9092,其中服务在同一Docker网络上(它们在我怀疑您复制的Compose文件示例中(

相关内容

最新更新