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



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

具有代理和 zookeeper 的工作 Kafka 集群已经在同一个 GKE 集群上运行。我知道我可以通过在终结点可用后向http://localhost:8083/connectors终结点发送发布请求来创建连接器。 但是,Kafka-connect 容器进入 RUNNING 状态,然后开始加载 jar 文件,直到加载所有 jar 文件,上面提到的端点都无法访问。

我正在寻找一种方法来自动执行手动execpod 的步骤,检查端点是否已准备就绪,然后发送 post 请求。我有一个 shell 脚本,其中包含对该端点的大量curl -X POST请求以创建连接器,并且还有这些连接器的配置文件,这些文件在独立模式下工作正常(在此 confluent 博客中使用 Confluent 平台显示(。

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

  1. 以某种方式确定容器何时真正准备就绪(当端点开始侦听时(,然后运行包含 curl 请求的 shell 脚本
  2. 或者像在独立模式下一样使用配置文件(例如:$ <path/to/CLI>/confluent local load connector_name -- -d /connector-config.json(

以上哪种方法更好?

第二种方法(配置文件(甚至可以在分布式模式下可行吗?

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

编辑: 关于他的github问题(感谢下面@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 请求。

confluent local

不与远程 Connect 集互,例如 Kubernetes 中的集群。

请参考 Kafka Connect REST API

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

上面提到的终结点无法访问。

本地主机是您在其中键入命令的物理机,而不是远程 GKE 集群

以某种方式识别容器何时实际准备就绪

Kubernetes 健康检查对此负责

kubectl get services

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

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

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

或者尝试看看您是否可以为此问题进行 PR

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

最新更新