【问题标题】:KSQLDB StandAlone Deployment Returns Error "Connection could not be established. Broker may not be available"KSQLDB 独立部署返回错误“无法建立连接。代理可能不可用”
【发布时间】:2021-04-11 20:29:29
【问题描述】:

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/docker-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,另一个是 linux vm。但是我在运行 ksqldb compose 文件时遇到了这个错误

[2021-01-06 03:17:51,522] WARN [AdminClient clientId=adminclient-1] 无法建立到节点 -1 (localhost/127.0.0.1:29092) 的连接。经纪人可能不可用。 (org.apache.kafka.clients.NetworkClient:780)

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

【问题讨论】:

    标签: docker apache-kafka docker-compose confluent-platform ksqldb


    【解决方案1】:

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

    另一种选择是只使用 docker 网络,但使用两个独立的 docker-compose 文件将产生两个网络(broker_defaultksql_default,如果我没记错的话)。所以 ksql 无法连接到您的代理,因为它被隔离在自己的网络中。你可以用 f.e. 解决这个问题。以下:

    • 创建一些共享网络,例如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
    

    【讨论】:

    • 您的解决方案在同一台机器上编写文件时工作正常,最初是我的问题。但如果两者都在不同的机器上不工作。如果有针对不同机壳的任何解决方案.. 这对我会有很大帮助。
    • 正如 OneCricketeer 在 cmets 中已经提到的,只需将 localhost 部分替换为其他主机可访问的主机 IP。如果你想在不同的机器上运行你的设置,你应该在你的问题中包含这些信息,否则不清楚。
    【解决方案2】:

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

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

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

    【讨论】:

    • 像这样尝试的实际原因是在我的部署环境代理上,而 ksqldb 可能在不同的机器上,这就是为什么我分割 compose 文件以检查它们在单独的 compose 文件中时如何连接。我尝试使用 KSQL_BOOTSTRAP_SERVERS: broker:9092。但它不起作用。
    • 如果您使用单独的文件,您需要使用共享的桥接/覆盖网络,如果您使用单独的机器,尤其如此。不过,就像回答的那样,如果使用单独的机器,你会使用 Docker Swarm 或 Kubernetes
    • that's were you'd use Docker Swarm or Kubernetes 我只使用 docker 桌面。您能否解释一下在我的环境中没有 Docker Swarm 或 Kubernetes 是否可行?
    • Docker Desktop 支持这两个选项
    • 我没有。这纯粹是特定于您的设置的网络问题。我能做的最好的就是confluent.io/blog/kafka-listeners-explained,但是用你的 docker 主机的外部 LAN IP 替换 localhost 的每个实例
    猜你喜欢
    • 2019-12-27
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多