当前位置: 首页 > 知识库问答 >
问题:

如何在库伯内特斯上创建Kafka连接器?

樊腾
2023-03-14

我正在分布式模式下使用 cp-kafka-connect Helm chart 在 Google Kubernetes Engine (GKE) 上部署 Kafka-connect。

一个工作的Kafka集群与代理和动物园管理员已经在同一个GKE集群上运行。我知道我可以通过发送帖子请求到http://localhost:8083/connectorsendpoint来创建连接器,一旦它可用。但是,Kafka连接容器进入运行状态,然后开始加载jar文件,直到所有的jar文件都被加载,上面提到的endpoint是不可达的。

我正在寻找一种方法来自动化手动< code > exec pod的步骤,检查endpoint是否准备好,然后发送post请求。我有一个shell脚本,它有一堆对这个endpoint的< code>curl -X POST请求来创建连接器,并且也有这些连接器的配置文件,它们在独立模式下工作良好(在这个汇合博客中使用汇合平台展示)。

现在只有两种方法来创建连接器:

  1. 以某种方式确定容器何时真正准备就绪(当endpoint开始侦听时),然后运行包含 curl 请求的 shell 脚本
  2. 或者像在独立模式下一样使用配置文件(例如:$

以上哪种方法更好?

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

  • 如果是:如何做到这一点?
  • 如果否:如何成功地完成第一种方法中解释的内容?

编辑:关于他的github问题(感谢下面@cricket_007的回答),我在endpoint准备就绪后创建了容器命令和连接器,因此添加了以下内容:

...
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 请求。


共有1个答案

公冶伟
2023-03-14

融合本地不与远程Connect集群交互,例如Kubernetes中的集群

请参考Kafka Connect REST API

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

上述endpoint无法访问。

本地主机是您输入命令的物理机器,而不是远程GKE集群

以某种方式确定容器何时真正准备好

Kubernetes健康检查对此负责

kubectl get services

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

那不是真的。您可以在集群中额外运行 Landoop 的 Kafka Connect UI 或 Confluent Control Center 进行指向和单击。

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

或者试试看能不能为这期做个公关

https://github.com/confluentinc/cp-docker-images/issues/467

 类似资料:
  • 这是我的appsettings.json 这是我的应用部署 这是我为Mongob服务 当我想连接到数据库时,这不起作用,抛出一个错误超时,什么是发送连接字符串到应用程序的正确方法。yaml文件?我应该设置aspnetcore环境变量吗?我应该换些什么吗?json配置文件?抱歉缺乏知识

  • 库伯内特斯top(kubectl top)命令显示的内存使用情况与pod中运行Linuxtop命令不同。 我创建了 k8s 部署,其中 YAML 包含以下内存限制: 以下命令的输出如下所示: 运行linux top命令: 注意“free -g”还显示使用了11Gb。 问题是这与“kubectl顶部”相矛盾,后者仅显示使用了1205 mb。

  • 我怎样才能使用入口呢?我尝试使用NodePort和--Target etPort=1001,我在servicePort中添加了80在。 kubectl公开部署测试--Target-port=1001--type=NodePort 我得到了错误 找不到后端-404 我使用的是正确的方法还是需要遵循其他方法?

  • 具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址? 这两个IP地址用于LoadBalancer类型的入口资源和服务资源: 以下是我的想法: 这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它 谷歌应该承

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他