VikingDB Flink SQL Connector 用于将火山引擎流式计算 Flink 版中的实时或批式计算结果写入 VikingDB Collection。Connector 根据稳定主键执行 Upsert 或 Delete,并支持通过 VikingDB Catalog 查看 Collection 元数据以及创建、删除 Collection。
Connector 标识符和 Catalog 类型均为 vikingdb。Connector 已由平台内置,无需上传额外 Connector JAR。
类别 | 详情 |
|---|---|
支持类型 | Sink、Catalog |
作业类型 | Flink SQL |
运行模式 | 流模式、批模式 |
支持的变更类型 | INSERT、UPDATE_AFTER、UPDATE_BEFORE、DELETE;Catalog 支持 CREATE TABLE 和 DROP TABLE |
数据格式 | 无 |
组件形态 | 平台内置,无需独立部署 |
交付语义 | At-Least-Once |
组件 | 支持版本 | 说明 |
|---|---|---|
火山引擎流式计算 Flink 版 |
| 使用平台内置 VikingDB Connector。 |
VikingDB | 火山引擎向量数据库 VikingDB | Collection Schema 和向量维度必须与 Flink 表定义匹配。 |
ARRAY<FLOAT>、ARRAY<DOUBLE>、二维数组和稀疏 Map 写入稠密向量、Tensor 和稀疏向量。sink.bulk-flush.batch-size 取值范围为 1~100,默认值为 100。ARRAY<FLOAT> 或 ARRAY<DOUBLE> 推断 vector 时,需要配置 vikingdb.field.<字段名>.dim。BYTES、VARBINARY、ARRAY<BOOLEAN> 等不支持映射的 Flink 类型会在建表或运行阶段报错。async=true 可能带来分钟级 Collection 可见延迟和小时级 Index 同步延迟,不适用于要求写入后立即检索的场景。CREATE TABLE vikingdb_sink ( id STRING, text STRING, vector ARRAY<DOUBLE>, PRIMARY KEY (id) NOT ENFORCED ) WITH ( 'connector' = 'vikingdb', 'data-plane.host' = '<vikingdb_data_plane_host>', 'collection-name' = '<collection_name>', 'api-key' = '${secret_values.vikingdb-api-key}', 'vikingdb.field.vector.dim' = '768' );
参数 | 说明 | 数据类型 | 是否必填 | 默认值 | 备注 |
|---|---|---|---|---|---|
| VikingDB 数据面地址。 | STRING | 是 | 无 | 从 VikingDB 控制台获取。 |
| 数据面访问协议。 | STRING | 否 |
| 生产环境建议使用 HTTPS。 |
| VikingDB 地域。 | STRING | 否 | 空 | Catalog 场景必填。 |
| VikingDB API Key。 | STRING | 条件必填 | 无 | 可引用 Flink 加密变量;与 |
| 保存 API Key 的环境变量名。 | STRING | 条件必填 | 无 | 与 |
| 连接超时时间。 | DURATION | 否 |
| — |
| Socket 读写超时时间。 | DURATION | 否 |
| — |
| 请求失败后的最大重试次数。 | INTEGER | 否 |
| 取值不小于 0。 |
| HTTP 连接池最大连接数。 | INTEGER | 否 |
| — |
| 单路由最大连接数。 | INTEGER | 否 |
| 不得超过连接池总连接数。 |
| 连接存活时间。 | DURATION | 否 |
| — |
| 空闲连接复用前的校验阈值。 | DURATION | 否 |
| — |
| 空闲连接清理间隔。 | DURATION | 否 |
| — |
参数 | 说明 | 数据类型 | 是否必填 | 默认值 | 备注 |
|---|---|---|---|---|---|
| Connector 标识符。 | STRING | 是 | 无 | 固定为 |
| 目标 Collection 名称。 | STRING | 条件必填 | 无 | 与 |
| 目标 Collection 资源 ID。 | STRING | 条件必填 | 无 | 与 |
| 主键物理字段名称。 | STRING | 条件必填 | 无 | DDL 未声明主键时使用;两种主键配置方式只选择一种。 |
| 单批提交的最大记录数。 | INTEGER | 否 |
| 取值范围为 1~100。 |
| 未满批次的刷新间隔。 | DURATION | 否 |
| — |
| 是否忽略 UPDATE_BEFORE。 | BOOLEAN | 否 |
|
说明 启用前请确认业务允许保留相应旧数据。 |
| 是否忽略 DELETE。 | BOOLEAN | 否 |
| 启用前确认业务允许保留已删除数据。 |
|
| STRING | 否 |
| 可根据业务统一配置为 |
| Sink 算子并行度。 | INTEGER | 否 | 无 | 必须大于 0。 |
| 是否使用 VikingDB 异步写入。 | BOOLEAN | 否 |
| 启用前评估 Collection 和 Index 的可见性延迟。 说明 启用 |
| 数据过期时间。 | LONG | 否 | 无 | 单位为秒;不配置或取 |
| 覆盖字段类型推断。 | STRING | 否 | 无 | 仅在默认推断不满足目标 Schema 时配置。 |
| 指定向量维度。 | INTEGER | 条件必填 | 无 | 稠密向量字段需要与 Collection 维度一致。 |
参数 | 说明 | 数据类型 | 是否必填 | 默认值 | 备注 |
|---|---|---|---|---|---|
| Catalog 类型。 | STRING | 是 | 无 | 固定为 |
| VikingDB 控制面地址。 | STRING | 是 | 无 | Catalog 管理 Collection 时使用。 |
| VikingDB 项目名称。 | STRING | 否 |
| — |
| Flink Catalog 默认数据库。 | STRING | 否 |
| — |
| 火山引擎 Access Key。 | STRING | 条件必填 | 无 | 可引用加密变量;与 |
| 保存 Access Key 的环境变量名。 | STRING | 条件必填 | 无 | 与 |
| 火山引擎 Secret Key。 | STRING | 条件必填 | 无 | 可引用加密变量;与 |
| 保存 Secret Key 的环境变量名。 | STRING | 条件必填 | 无 | 与 |
Catalog 同时使用“通用连接参数”中的数据面地址、地域和 API Key。
Flink 类型 | 默认 VikingDB 类型 | 说明 |
|---|---|---|
|
| — |
|
| — |
|
| 可能发生精度变化,使用前核对业务要求。 |
|
| — |
|
| — |
|
| — |
|
| — |
整数数组 |
| — |
|
| 需要配置向量维度。 |
|
| — |
|
| — |
|
| 用于视频原始字段。 |
|
| 受 |
以下示例将 Flink SQL 结果写入已存在的 VikingDB Collection:
CREATE TABLE vikingdb_sink ( id STRING, text STRING, city STRING, score DOUBLE, vector ARRAY<DOUBLE>, PRIMARY KEY (id) NOT ENFORCED ) WITH ( 'connector' = 'vikingdb', 'data-plane.host' = '<vikingdb_data_plane_host>', 'data-plane.scheme' = 'https', 'region' = '<region>', 'collection-name' = '<collection_name>', 'api-key' = '${secret_values.vikingdb-api-key}', 'vikingdb.field.vector.dim' = '768', 'sink.bulk-flush.batch-size' = '100', 'sink.bulk-flush.interval' = '1s', 'sink.local-time-zone' = 'UTC' ); INSERT INTO vikingdb_sink SELECT id, text, city, score, vector FROM source_table;
也可以通过 'api-key-env' = 'VIKINGDB_API_KEY' 引用环境变量。不要同时配置 api-key 和 api-key-env。
预期结果。 INSERT 和 UPDATE_AFTER 按主键 Upsert;DELETE 按主键删除;默认情况下 UPDATE_BEFORE 按旧主键执行 Delete。
CREATE CATALOG viking_catalog WITH ( 'type' = 'vikingdb', 'control-plane.host' = '<vikingdb_control_plane_host>', 'data-plane.host' = '<vikingdb_data_plane_host>', 'data-plane.scheme' = 'https', 'region' = '<region>', 'project-name' = 'default', 'default-database' = 'default', 'access-key' = '${secret_values.vikingdb-access-key}', 'secret-key' = '${secret_values.vikingdb-secret-key}', 'api-key' = '${secret_values.vikingdb-api-key}' ); USE CATALOG viking_catalog; USE `default`; SHOW TABLES; DESCRIBE <collection_name>;
AK、SK 和 API Key 也可以分别通过 access-key-env、secret-key-env 和 api-key-env 引用运行环境变量。
注意
谨慎执行 Catalog DDL 操作。通过 VikingDB Catalog 执行 CREATE TABLE ,将在 VikingDB 中创建实体 Collection;执行 DROP TABLE ,将删除对应的 Collection 并永久清除全部数据。 DROP TABLE 并非仅移除 Flink Catalog 元数据。执行删除操作前,需先行处理关联索引,同时完成目标信息核对、数据备份及变更审批流程。
Flink RowKind | VikingDB 操作 | 说明 |
|---|---|---|
| Upsert | 写入完整记录。 |
| Upsert | 按主键覆盖更新。 |
| Delete | 默认按主键删除。 |
| Delete | 默认删除旧主键记录。 |
Connector 采用 At-Least-Once 语义。Checkpoint 恢复期间可能重放请求,稳定、唯一且非空的主键是最终结果收敛的前提。
Collection 数据写入成功后,Index 仍需要按照 VikingDB 的同步机制更新检索数据。启用 async=true 或使用异步向量化时,可检索时间可能明显晚于 Collection 点查时间。
dim 一致,并通过目标 Index 执行样例检索。现象 | 可能原因 | 处理建议 |
|---|---|---|
提示必须配置主键 | DDL 和 | 在 DDL 中声明单列主键,或通过 |
向量字段写入失败 | 数组长度与 Collection 向量维度不一致。 | 核对 |
写入后暂时检索不到 | Collection 到 Index 尚未完成同步,或启用了异步写入/向量化。 | 先通过 Collection 点查确认写入,再检查 Index 同步状态和异步任务日志。 |
批量大小不能设置为 200 | VikingDB 单次数据写入最多支持 100 条。 | 将 |
故障恢复后重复提交 | At-Least-Once 恢复期间重放了数据。 | 使用稳定主键,使 Upsert/Delete 的最终结果收敛。 |