如何在 Kafka Sink 中为不同环境定义 s3bucket 的名称

Posted

技术标签:

【中文标题】如何在 Kafka Sink 中为不同环境定义 s3bucket 的名称【英文标题】:How to define name for s3bucket for different environment in Kafka Sink 【发布时间】:2021-12-14 22:05:14 【问题描述】:

我目前正在为不同的环境设置我的 aws s3 存储桶,以便我可以在 dev、tqa、stg 和 prd 中获取数据。我的存储桶在 dev 中的名称是 s3.dev.kafka.sink,而在 tqa 中它被命名为 s3.tqa.kafka.sink,每个都与其正确的 env 相关联。 Kafka Connect 网站中的文档没有指定如何设置环境,所以我按照以下方式进行了操作,但是我不断收到存储桶名称未正确命名的错误。

我把它放在秘密的 yaml 文件中

apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
   name: kafka-sink-s3-secret
   namespace: namespace
spec:
   backendType: secretManager
   data:
       -key: s3.tqa.kafka.sink
        name: bucket_name
        property: bucket_name

在部署文件中

env:
   -name: bucket_name
    valueFrom:
        secretKeyRef:
         name:kaka-sink-s3-secret
         key: bucket_name

我将在配置中指定存储桶名称: "s3.bucket.name":"'"$bucket_name"'"

但它无法部署。知道如何指定为 s3.ENV.kafka.sink 以便它在 aws 中自己的环境中运行正确的存储桶名称

【问题讨论】:

【参考方案1】:

开箱即用,Kafka Connect 无法访问除 AWS 开发工具包定义的环境变量(至少是密钥和配置文件)之外的环境变量

听起来您需要使用 Kafka Connect API 的 ConfigProvider

这是 Github 上的一个示例,您需要将其编译并加载到 Docker 映像中 - https://github.com/giogt/kafka-env-config-provider

在连接器属性中,像这样使用

"bucket.name": "$env:ENVIRONMENT_VARIABLE_NAME"

您应该能够使用 Helm 更好地分离/模板化秘密/部署资源定义中的完整存储桶名称

【讨论】:

我尝试了 -name: bucket_name 和 value: s3.-ENV-kafka.sink',当我部署时我得到了 s3.-tqa-.kafka.sink,但我没有不想要-tqa-,我只想要.tqa。如何排除 - 不确定我是否理解问题,但如果您不想要破折号,请不要将它们放在字符串中

以上是关于如何在 Kafka Sink 中为不同环境定义 s3bucket 的名称的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Sink 如何将字段映射到具有不同主题和表模式名称的数据库

flume 自定义 hbase sink

Flume简介与使用——Kafka Sink消费数据之Kafka安装

自定义kafka Sink

Flink的sink实战之二:kafka

如何处理 Kafka Connect Sink 中的背压?