如何在Kubernetes上为Kafka connect创建连接器?

如何在Kubernetes上为Kafka connect创建连接器?,kubernetes,apache-kafka,apache-kafka-connect,Kubernetes,Apache Kafka,Apache Kafka Connect,我正在分布式模式下使用Helm图表在Google Kubernetes引擎(GKE)上部署 带有代理和zookeeper的工作Kafka集群已经在同一个GKE集群上运行。我知道我可以通过向http://localhost:8083/connectors端点一旦可用。 但是,Kafka connect容器进入运行状态,然后开始加载jar文件,直到加载所有jar文件为止,上述端点是不可访问的 我正在寻找一种方法来自动化手动执行pod的步骤,检查端点是否准备好,然后发送post请求。我有一个shell

我正在分布式模式下使用Helm图表在Google Kubernetes引擎(GKE)上部署

带有代理和zookeeper的工作Kafka集群已经在同一个GKE集群上运行。我知道我可以通过向
http://localhost:8083/connectors
端点一旦可用。 但是,Kafka connect容器进入运行状态,然后开始加载jar文件,直到加载所有jar文件为止,上述端点是不可访问的

我正在寻找一种方法来自动化手动执行pod的步骤,检查端点是否准备好,然后发送post请求。我有一个shell脚本,它有一系列到这个端点的
curl-xpost
请求来创建连接器,并且还有这些连接器的配置文件,这些连接器可以在独立模式下正常工作(在本文中使用Confluent platform show)

现在,只有两种方法可以创建连接器:

  • 以某种方式确定容器何时实际就绪(端点已开始侦听),然后运行包含curl请求的shell脚本
  • 或者像在独立模式下一样使用配置文件(例如:
    $/confluent local load connector\u name---d/connector config.json
  • 以上哪种方法更好

    第二种方法(配置文件)在分布式模式下是否可行

    • 如果是:怎么做
    • 如果否:如何成功完成第一种方法中解释的内容
    编辑: 关于他的(感谢@cricket_007下面的回答),我添加了以下内容,作为端点准备就绪后创建的容器命令和连接器:

    ...
    command:
      - /bin/bash
      - -c
      - |
        /etc/confluent/docker/run &
        echo "Waiting for Kafka Connect to start listening on kafka-connect  "
        while : ; do
          curl_status=`curl -s -o /dev/null -w %{http_code} http://localhost:8083/connectors`
          echo -e `date` " Kafka Connect listener HTTP state: " $curl_status " (waiting for 200)"
          if [ $curl_status -eq 200 ] ; then
            break
          fi
          sleep 5
        done
        echo -e "\n--\n+> Creating Kafka Connector(s)"
        /tmp/scripts/create-connectors.sh
        sleep infinity
    ...
    

    /tmp/scripts/create connectors.sh
    是一个安装在外部的脚本,包含一组使用CURL到Kafka connect API的POST请求。

    合流本地
    不会与远程连接群集(如Kubernetes中的群集)交互

    请参阅

    您可以像在集群中运行的任何其他RESTful api一样连接到它(例如通过节点端口或入口/api网关)

    上面提到的端点是不可到达的

    Localhost是将命令输入到的物理机器,而不是远程GKE集群

    以某种方式确定容器何时实际准备就绪

    Kubernetes的健康检查对此负责

    kubectl get services
    
    只有两种方法可以创建连接器

    那不是真的。您还可以在集群中运行Landoop的Kafka Connect UI或Confluent Control Center来点击

    但是,如果您有本地配置文件,您还可以编写与API交互的代码

    或者试着看看你是否能为这个问题做一个公关


    本答案中提到的大部分要点都已经在问题本身中了。我了解合流本地的用法,但如问题中所述,我正在寻找一种使用配置文件(在分布式模式下)创建连接器的方法,或者可以自动执行步骤1。检查端点是否可访问(因为加载配置需要一些时间),2。如果是,则提出post请求。如果您有本地配置文件,您可以编写与API进行交互的代码吗?类似于
    find configs/-name“*.json”-exec curl-X POST-d@{}http://connect-k8s-svc:8083  \;或编写python、Java等。这只是http调用感谢您为我指出了这个问题。我认为将YAML清单的
    命令
    变量更改为无限期地等待端点准备就绪,然后启动就可以了。让我试试,然后告诉你结果。另外,我现在很想知道,为了创建连接器,我必须在
    config
    主题中放入何种类型(格式)的消息。你介意解释一下(或者指出一个文档/问题)吗?它们是JSON格式的。实际上我以前没有做过,但是欢迎您随时使用这些内部主题来检查它们