如何自动运行Kafka Connect连接器(例如在生产中)?

时间:2019-06-06 09:32:34

标签: apache-kafka apache-kafka-connect confluent

在Kafka Connect启动时(例如在Confluent Platform中),是否可以自动加载(多个)Kafka Connect连接器?

到目前为止我发现的东西:

融合文档说明要使用bin/connect-standalone 用于独立模式的命令,带有用于工作程序和每个单个连接器的属性文件。

对于分布式模式,您必须通过REST API运行连接器。

https://docs.confluent.io/current/connect/userguide.html#standalone-modehttps://docs.confluent.io/current/connect/managing/configuring.html#standalone-example

还有另一种方法,例如包括应在“ connect- [standalone | distributed] .properties”文件中运行的所有连接器(类似于在ksql-server.properties中提供KSQL查询文件),以便在Kafka Connect启动时自动加载它们(例如在Confluent平台中)?

或者即使在生产环境中,连接器是否也按上述方式“手动”装载?

1 个答案:

答案 0 :(得分:2)

通常,在分布式模式下运行Kafka Connect时,您必须使用REST API。但是,您可以使用docker compose编写连接器创建脚本; @Robin Moffatt为此写了一个不错的article

kafka-connect:
  image: confluentinc/cp-kafka-connect:5.1.2
  environment:
    CONNECT_REST_PORT: 18083
    CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect"
    […]
  volumes:
    - $PWD/scripts:/scripts
  command: 
    - bash 
    - -c 
    - |
      /etc/confluent/docker/run & 
      echo "Waiting for Kafka Connect to start listening on kafka-connect ⏳"
      while [ $$(curl -s -o /dev/null -w %{http_code} http://kafka-connect:8083/connectors) -eq 000 ] ; do 
        echo -e $$(date) " Kafka Connect listener HTTP state: " $$(curl -s -o /dev/null -w %{http_code} http://kafka-connect:8083/connectors) " (waiting for 200)"
        sleep 5 
      done
      nc -vz kafka-connect 8083
      echo -e "\n--\n+> Creating Kafka Connect Elasticsearch sink"
      /scripts/create-es-sink.sh 
      sleep infinity
  

注意:

     
      
  • 在命令部分,将$替换为$$以避免错误   “命令”选项

  • 的插值格式无效   
  • sleep infinity是   必要,因为我们已将/etc/confluent/docker/run流程发送到   一个后台线程(&),因此,如果主线程   command完成。

  •   
  • 配置连接器的实际脚本是   curl在一个单独的文件中调用。您可以将其内置到Docker中   撰写但感觉有点令人讨厌。

  •   
  • 您可以将其与   如果您要安装自定义连接器插件,请使用上述技术   在启动Kafka Connect之前,例如   confluent-hub install --no-prompt confluentinc/kafka-connect-gcs:5.0.0 /etc/confluent/docker/run

  •