簡體   English   中英

使用 Docker 創建 Kafka-Connect 集群 撰寫供 ksqlDB 使用

[英]Create Kafka-Connect cluster with Docker Compose to be used by ksqlDB

我基本上嘗試做的是使用 Docker Compose 擁有多個 Kafka Connect 實例。 我希望 ksqlDB 使用這個集群。 目前,它們都在一台機器上運行,但最終我想將它部署到多節點環境。 我的問題是 ksqlDB 顯然找不到 Kafka Connect 集群。 KSQL_KSQL_CONNECT_URL ,它代表單個 Kafka Connect 實例的 URL。 不提供此變量會導致默認值,即 localhost:8083。

我找到了這個 docker-compose 文件,我認為它可以做我想做的事情:ksqlDB 和多個 Kafka Connect 實例。 不幸的是,它對我沒有太大幫助,因為它使用的是舊版本的 KSQL Server。 這是我的 docker-compose 文件:

---
version: '3'

services:

  ksqldb-server-connect-test:
    image: confluentinc/ksqldb-server:0.15.0
    hostname: ksqldb-server-connect-test
    container_name: ksqldb-server-connect-test
    #ports:
    #  - "8088:8088"
    network_mode: "host"
    environment:
      KSQL_KSQL_SERVICE_ID: "default_"
      KSQL_LISTENERS: http://0.0.0.0:8088
      KSQL_BOOTSTRAP_SERVERS: localhost:9092
      KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"
      KSQL_KSQL_SCHEMA_REGISTRY_URL: http://localhost:8081
      #KSQL_KSQL_CONNECT_URL: http://localhost:8083
      
  ksqldb-cli-connect-test:
    image: confluentinc/ksqldb-cli:0.15.0
    container_name: ksqldb-cli-connect-test
    network_mode: "host"
    depends_on:
      - ksqldb-server-connect-test
    entrypoint: /bin/sh
    tty: true

  schema-registry-connect-test:
    image: confluentinc/cp-schema-registry:6.0.1
    container_name: schema-registry-connect-test
    network_mode: "host"
    #ports:
    #  - "8081:8081"
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: localhost:9092
    restart: always
    
  kafka-connect-1:
    image: confluentinc/cp-kafka-connect-base:6.0.1
    container_name: kafka-connect-1
    network_mode: "host"
    environment:
      CONNECT_BOOTSTRAP_SERVERS: "localhost:9092"
      CONNECT_REST_PORT: 8082
      CONNECT_GROUP_ID: kafka-connect-test
      CONNECT_CONFIG_STORAGE_TOPIC: _connect-configs-test
      CONNECT_OFFSET_STORAGE_TOPIC: _connect-offsets-test
      CONNECT_STATUS_STORAGE_TOPIC: _connect-status-test
      CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
      CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
      CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: 'http://localhost:8081'
      CONNECT_REST_ADVERTISED_HOST_NAME: "localhost"
      CONNECT_LOG4J_APPENDER_STDOUT_LAYOUT_CONVERSIONPATTERN: "[%d] %p %X{connector.context}%m (%c:%L)%n"
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1"
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1"
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1"
      CONNECT_OFFSET_STORAGE_PARTITIONS: "25"
      CONNECT_STATUS_STORAGE_PARTITIONS: "5"
      CONNECT_PLUGIN_PATH: /usr/share/java,/usr/share/confluent-hub-components,/data/connect-jars
    volumes:
      - $PWD/data/connect-jars/:/usr/share/java/kafka-connect-jdbc/jars/
      - $PWD/jmx:/usr/app/
      
  kafka-connect-2:
    image: confluentinc/cp-kafka-connect-base:6.0.1
    container_name: kafka-connect-2
    network_mode: "host"
    environment:
      CONNECT_BOOTSTRAP_SERVERS: "localhost:9092"
      CONNECT_REST_PORT: 8084
      CONNECT_GROUP_ID: kafka-connect-test
      CONNECT_CONFIG_STORAGE_TOPIC: _connect-configs-test
      CONNECT_OFFSET_STORAGE_TOPIC: _connect-offsets-test
      CONNECT_STATUS_STORAGE_TOPIC: _connect-status-test
      CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
      CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
      CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: 'http://localhost:8081'
      CONNECT_REST_ADVERTISED_HOST_NAME: "localhost"
      CONNECT_LOG4J_APPENDER_STDOUT_LAYOUT_CONVERSIONPATTERN: "[%d] %p %X{connector.context}%m (%c:%L)%n"
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1"
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1"
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1"
      CONNECT_OFFSET_STORAGE_PARTITIONS: "25"
      CONNECT_STATUS_STORAGE_PARTITIONS: "5"
      CONNECT_PLUGIN_PATH: /usr/share/java,/usr/share/confluent-hub-components,/data/connect-jars
    volumes:
      - $PWD/data/connect-jars/:/usr/share/java/kafka-connect-jdbc/jars/
      - $PWD/jmx:/usr/app/

請注意,我使用network_mode: "host"因為 Kafka 集群本身不在 Docker 容器中運行,因此在我的情況下,這可以簡化與 Kafka 的通信。

有人對如何僅使用 docker-compose 將 ksqlDB 連接到 Kafka Connect 集群有想法或解決方案嗎?

我需要實現的是容錯。

好的,所以您需要在單個 Kafka Connect 組中 > 1 個 Kafka Connect 工作人員。 這就是您配置相同存儲主題和group.id的結果

所以問題是如何讓 ksqlDB 連接到 Kafka Connect 工作人員集群。 由於 Kafka Connect 使用 Kafka 本身來保存配置,因此它連接到哪個工作人員並不重要。 ksql.connect.url (以及 docker 中的KSQL_KSQL_CONNECT_URL環境變量)是執行此操作的正確方法,但是從文檔中不清楚您是否可以指定多個值。

如果你不能,那么我猜你需要在工作人員面前放置一個無狀態負載均衡器並將 ksqlDB 指向那里。

此外,主機名將是容器的名稱( kafka-connect-1 / kafka-connect-2 ),而不是localhost

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM