我们可以在创建 Kafka 连接器时在 Postman 中使用系统环境变量吗

Can we use System Env Variables in Postman while creating Kafka Connector(s)

我们已将自定义的 Confluent Kafka 连接器部署为 Kubernetes 中的有状态集,它从 Azure KeyVault 安装机密。这些秘密包含数据库用户名和密码,用于在使用 Postman 通过 rest 端点 https://kafka.mydomain.com/connectors 创建连接器时使用。

秘密正在作为容器中的环境变量加载。并且 kubernetes-ingress-controller - 基于路径的路由 用于暴露 rest 端点。

到目前为止,我们团队无法在通过 Postman 创建连接器时使用环境变量。

连接器配置:

{
 "name": "TEST.CONNECTOR.SINK",
    "config": {
        
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
    "errors.log.include.messages": "true",
    "table.name.format": "AuditTransaction",
    "connection.password": "iampassword",             <------------ (1)
    "flush.size": "3",
    "tasks.max": "1",
    "topics": "TEST.CONNECTOR.SOURCE-AuditTransaction",
    "key.converter.schemas.enable": "false",
    "connection.user": "iamuser",                     <------------ (2)
    "value.converter.schemas.enable": "true",
    "name": "TEST.CONNECTOR.SINK",
    "errors.tolerance": "all",
    "connection.url": "jdbc:sqlserver://testdb.database.windows.net:1433;databaseName=mytestdb01",
    "value.converter": "org.apache.kafka.connect.json.JsonConverter",
    "insert.mode": "insert",
    "errors.log.enable": "true",
    "key.converter": "org.apache.kafka.connect.json.JsonConverter"
}  
}

(1) 和 (2) - 这里我们要使用带值的系统环境变量 - $my_db_username=iamuser, $my_db_password=iampassword。我们尝试在那里使用 "$my_db_username""$my_db_password",但在 Connector Pod 的日志中,它没有解析为相应的值。

日志:

[2020-07-28 12:31:22,838] INFO Starting JDBC Sink task (io.confluent.connect.jdbc.sink.JdbcSinkTask:44)
[2020-07-28 12:31:22,839] INFO JdbcSinkConfig values: 
    auto.create = false
    auto.evolve = false
    batch.size = 3000
    connection.password = [hidden]
    connection.url = jdbc:sqlserver://testdb.database.windows.net:1433;databaseName=mytestdb01
    connection.user = $my_db_username
    db.timezone = UTC
    delete.enabled = false
    dialect.name = 
    fields.whitelist = []
    insert.mode = insert
    max.retries = 10
    pk.fields = []
    pk.mode = none
    quote.sql.identifiers = ALWAYS
    retry.backoff.ms = 3000
    table.name.format = AuditTransaction

有什么方法可以在此配置中使用 system/container 环境变量,同时使用 Postman 或其他工具创建连接器?

终于做到了!!使用 FileConfigProvider。所有需要的信息都是 here

我们只需要根据我们的要求参数化 connect-secrets.properties 并在启动时替换 env vars 值。

这不允许通过 Postman 使用环境变量。但是根据我们的需要专门调整的参数化 connect-secrets.properties 完成了工作,而 FileConfigProvider 通过从 connect-secrets.properties

中选取值来完成剩下的工作

更新

找到了一种使用环境变量实现此功能的方法 here