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



有没有办法在Kafka Connect启动时自动加载(多个(Kafka Connect连接器(例如在Confluent Platform中(?

到目前为止,我发现了什么:

使用bin/connect-standalone的 Confluent 文档状态独立模式的命令,其中包含辅助角色和每个连接器的属性文件。

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

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

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

或者连接器是否如上文所述"手动"加载,即使在生产环境中也是如此?

通常,在分布式模式下运行Kafka Connect时,您必须使用REST API。但是,您可以使用 docker 撰写来编写创建连接器的脚本;@Robin Moffatt为此写了一篇很好的文章:

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

相关内容

  • 没有找到相关文章

最新更新