METALAKE

由于Seatunnel在执行任务时,需要将数据库用户名与密码等隐私信息明文写在脚本中,可能会导致信息泄露;并且维护较为困难,数据源信息发生变更时可能需要手动更改。

因此引入了metalake,将数据源的信息存储于Apache Gravitino等metalake中,任务脚本采用sourceId和占位符的方法来代替原本的用户名和密码等信息,运行时seatunnel-engine通过http请求从metalake获取信息,根据占位符进行替换。

若要使用metalake,首先要修改seatunnel-env.sh中的环境变量:

  • METALAKE_ENABLED
  • METALAKE_TYPE
  • METALAKE_URL

METALAKE_ENABLED设为trueMETALAKE_TYPE当前仅支持设为gravitino

对于Apache Gravitino,METALAKE_URL设为

http://host:port/api/metalakes/your_metalake_name/catalogs/

使用示例:

用户需要先在Gravitino中创建catalog,如

curl -L 'http://localhost:8090/api/metalakes/test_metalake/catalogs'
-H 'Content-Type: application/json'
-H 'Accept: application/vnd.gravitino.v1+json'
-d '{
    "name": "test_catalog",
    "type": "relational",
    "provider": "jdbc-mysql",
    "comment": "for metalake test",
    "properties": {
        "jdbc-driver": "com.mysql.cj.jdbc.Driver",
        "jdbc-url": "not used",
        "jdbc-user": "root",
        "jdbc-password": "Abc!@#135_seatunnel"
    }
}'

这样便在test_metalake中创建了一个test_catalogmetalake需要提前创建)

于是METALAKE_URL可以设为

http://localhost:8090/api/metalakes/test_metalake/catalogs/

source可以写为

source {
    Jdbc {
        url = "jdbc:mysql://mysql-e2e:3306/seatunnel?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"
        driver = "${jdbc-driver}"
        connection_check_timeout_sec = 100
        sourceId = "test_catalog"
        user = "${jdbc-user}"
        password = "${jdbc-password}"
        query = "select * from source"
    }
}

其中sourceId指代catalog的名称,从而其他项可以使用${}占位符,运行时会自动替换。注意,在sink中使用时,同样叫sourceId;使用占位符时必须以${开头,以}结尾,每一项最多只能包含一个占位符,占位符以外也可以有内容