使用带有 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
文件的路径。您可以在此处找到 image
和 plugin.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 进行仪表板