如何在 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 如何将字段映射到具有不同主题和表模式名称的数据库