使用带有 Helm 安装的 Kafka/Confluent 的连接器

Posted

技术标签:

【中文标题】使用带有 Helm 安装的 Kafka/Confluent 的连接器【英文标题】:Using a connector with Helm-installed Kafka/Confluent 【发布时间】:2019-08-23 01:19:54 【问题描述】:

我已经使用 Helm 图表 https://github.com/confluentinc/cp-helm-charts 按照这些说明 https://docs.confluent.io/current/installation/installing_cp/cp-helm-charts/docs/index.html 在本地 Minikube 上安装了 Kafka,如下所示:

helm install -f kafka_config.yaml confluentinc/cp-helm-charts --name kafka-home-delivery --namespace cust360

kafka_config.yaml 几乎与默认 yaml 相同,唯一的例外是我将其缩减为 1 个服务器/代理而不是 3 个(只是因为我试图节省本地 minikube 上的资源;希望这是与我的问题无关)。

在 Minikube 上运行的还有一个 mysql 实例。这是kubectl get pods --namespace myNamespace的输出:

我想使用其中一个连接器(例如Debezium MySQL CDC)连接 MySQL 和 Kafka。在说明中,它说:

安装您的连接器

使用 Confluent Hub 客户端安装它 连接器:

confluent-hub install debezium/debezium-connector-mysql:0.9.2

听起来不错,除了 1) 我不知道要在哪个 pod 上运行此命令,2) 似乎没有一个 pod 有可用的 confluent-hub 命令。

问题:

    confluent-hub 不是通过这些 Helm 图表安装的吗? 我必须自己安装 confluent-hub 吗? 如果是这样,我必须将它安装在哪个 pod 上?

【问题讨论】:

在黑暗中拍摄,但连接器不应该安装在kafka-connect 吊舱中吗?您可能还想看看 Strimzi。它提供了一种 kube 原生方式在 k8s 上滚动 Kafka 集群。 请参阅“自动安装 Kafka Connect 插件” -- rmoff.net/2018/12/15/docker-tips-and-tricks-with-ksql-and-kafka 即更改 Connect 容器的命令 【参考方案1】:

理想情况下,这应该可以作为helm 脚本的一部分进行配置,但不幸的是,目前还没有。解决此问题的一种方法是从 Confluent 的 Kafka Connect Docker 映像构建一个新的 Docker。手动下载连接器并将内容提取到文件夹中。将其内容复制到容器中的路径。像下面的东西。

Dockerfile 的内容

FROM confluentinc/cp-kafka-connect:5.2.1
COPY <connector-directory> /usr/share/java

/usr/share/java 是 Kafka Connect 查找插件的默认位置。您还可以在安装 helm 期间使用不同的位置并提供新位置 (plugin.path)。

构建此映像并将其托管在可访问的地方。在helm 安装期间,您还必须提供/覆盖图像和标签详细信息。

Here 是values.yaml 文件的路径。您可以在此处找到 imageplugin.path 值。

【讨论】:

【参考方案2】:

只是对 Jegan 上述评论的补充:https://***.com/a/56049585/6002912

您可以选择执行下面的 Dockerfile。推荐。

FROM confluentinc/cp-server-connect-operator:5.4.0.0

RUN confluent-hub install --no-prompt debezium/debezium-connector-postgresql:1.0.0

或者您可以改用 Docker 的多阶段构建。

FROM confluentinc/cp-server-connect-operator:5.4.0.0

COPY --from=debezium/connect:1.0 \
    /kafka/connect/debezium-connector-postgres/ \
    /usr/share/confluent-hub-components/debezium-connector-postgres/

这将帮助您节省为 debezium-connector-postgres 等插件获取正确 jar 文件的时间。

来自 Confluent 文档:https://docs.confluent.io/current/connect/managing/extending.html#create-a-docker-image-containing-c-hub-connectors

【讨论】:

【参考方案3】:

Kafka Connect pod 应该已经安装了 confluent-hub。您应该在该 pod 上运行命令。

【讨论】:

如果 pod 重新启动,该连接器将消失,但 暂时忽略@cricket_007 的问题(尽管这可能有问题) - 当我在该 pod 上运行 bash 时,我输入 confluent-hub 作为命令,我得到“找不到命令”跨度> 【参考方案4】:

cp kafka connect pod 有 2 个容器,其中一个是 cp-kafka-connect-server 容器。该容器安装了 confluent-hub。您可以登录该容器并在那里运行您的连接器命令。登录该容器,运行以下命令:

kubectl exec -it pod-name -c cp-kafka-connect-server -- /bin/bash

【讨论】:

【参考方案5】:

在最新版本的图表中,这可以使用customEnv.CUSTOM_SCRIPT_PATH来实现

见README.md

脚本可以作为secret 传递并作为volume 挂载

【讨论】:

以上是关于使用带有 Helm 安装的 Kafka/Confluent 的连接器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Helm 导入仪表板,使用 Sidecar 进行仪表板

helm2和helm3的区别及helm2的安装使用

Grafana helm 通知配置

云原生之kubernetes实战在k8s集群下helm工具的安装与使用

Helm2和Helm3的安装卸载常用命令

k8s 安装helm