You need to enable JavaScript to run this app.
文档中心
流式计算 Flink版

流式计算 Flink版

复制全文
下载 pdf
Connector 参考
VikingDB (公测中)
复制全文
下载 pdf
VikingDB (公测中)

功能概述

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 版

  • 1.17.0
  • 1.20.0
  • 2.2.0

使用平台内置 VikingDB Connector。

VikingDB

火山引擎向量数据库 VikingDB

Collection Schema 和向量维度必须与 Flink 表定义匹配。

特色功能

  • 支持将 Flink Changelog 转换为 VikingDB Upsert 和 Delete 操作,用于实时同步业务数据和向量数据。
  • 支持通过 ARRAY<FLOAT>、ARRAY<DOUBLE>、二维数组和稀疏 Map 写入稠密向量、Tensor 和稀疏向量。
  • 支持写入启用文本、图片或视频向量化能力的 Collection。
  • 支持使用 Catalog 查看 Collection 元数据,并通过 Flink SQL 创建或删除真实 Collection。
  • API Key、AK 和 SK 均支持通过 Flink 加密变量或运行环境变量引用。

前提条件

  1. 已开通火山引擎流式计算 Flink 版和向量数据库 VikingDB。
  2. Flink 资源池可访问 VikingDB 数据面地址;生产环境建议优先采用私网连接,具体操作参见私网连接方式。
  3. 使用 Sink 时,已创建目标 Collection,并确认字段名、字段类型、主键和向量维度与 Flink Sink 表一致。
  4. 已获取 VikingDB API Key,并通过 Flink 加密变量或运行环境变量提供给作业。
  5. 使用 Catalog 时,已获取控制面 AK、SK 和数据面 API Key,并确认凭证具有所需的 Collection 管理权限。

使用限制

  • Connector 不提供 Source 和 Lookup 能力。
  • Sink 必须且只能配置一个主键字段,主键值不能为 NULL。
  • sink.bulk-flush.batch-size 取值范围为 1~100,默认值为 100。
  • 向量字段必须与 Collection 的维度一致。通过 ARRAY<FLOAT> 或 ARRAY<DOUBLE> 推断 vector 时,需要配置 vikingdb.field.<字段名>.dim。
  • BYTES、VARBINARY、ARRAY<BOOLEAN> 等不支持映射的 Flink 类型会在建表或运行阶段报错。
  • 外部写入采用 At-Least-Once 语义。故障恢复期间可能重放数据,应通过稳定主键和 VikingDB Upsert/Delete 使最终结果收敛。
  • async=true 可能带来分钟级 Collection 可见延迟和小时级 Index 同步延迟,不适用于要求写入后立即检索的场景。
  • 写入启用向量化的 Collection 时,应写入 text、image 或 video 等原始字段;写入已有向量的 Collection 时,应写入 vector 字段,避免同时提交互斥字段。
  • Catalog 不支持重命名或修改 Collection,也不支持分区、视图和函数。
  • Catalog CREATE TABLE 和 DROP TABLE 会直接创建或删除 VikingDB 中的真实 Collection,不是只修改 Flink Catalog 元数据。

语法结构

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'
);

参数说明

通用连接参数

参数

说明

数据类型

是否必填

默认值

备注

data-plane.host

VikingDB 数据面地址。

STRING

是

无

从 VikingDB 控制台获取。

data-plane.scheme

数据面访问协议。

STRING

否

https

生产环境建议使用 HTTPS。

region

VikingDB 地域。

STRING

否

空

Catalog 场景必填。

api-key

VikingDB API Key。

STRING

条件必填

无

可引用 Flink 加密变量;与 api-key-env 选择一种。

api-key-env

保存 API Key 的环境变量名。

STRING

条件必填

无

与 api-key 选择一种。

connection.timeout

连接超时时间。

DURATION

否

10s

—

socket.timeout

Socket 读写超时时间。

DURATION

否

120s

—

max-retries

请求失败后的最大重试次数。

INTEGER

否

3

取值不小于 0。

connection.max-total

HTTP 连接池最大连接数。

INTEGER

否

200

—

connection.max-per-route

单路由最大连接数。

INTEGER

否

200

不得超过连接池总连接数。

connection.time-to-live

连接存活时间。

DURATION

否

60s

—

connection.validate-after-inactivity

空闲连接复用前的校验阈值。

DURATION

否

10s

—

connection.idle-evict

空闲连接清理间隔。

DURATION

否

30s

—

Sink 独有参数

参数

说明

数据类型

是否必填

默认值

备注

connector

Connector 标识符。

STRING

是

无

固定为 vikingdb。

collection-name

目标 Collection 名称。

STRING

条件必填

无

与 resource-id 至少配置一个。

resource-id

目标 Collection 资源 ID。

STRING

条件必填

无

与 collection-name 至少配置一个。

primary-key

主键物理字段名称。

STRING

条件必填

无

DDL 未声明主键时使用;两种主键配置方式只选择一种。

sink.bulk-flush.batch-size

单批提交的最大记录数。

INTEGER

否

100

取值范围为 1~100。

sink.bulk-flush.interval

未满批次的刷新间隔。

DURATION

否

1s

—

sink.ignore-update-before

是否忽略 UPDATE_BEFORE。

BOOLEAN

否

false

false 时按旧主键执行 Delete。

说明

启用前请确认业务允许保留相应旧数据。

sink.ignore-delete

是否忽略 DELETE。

BOOLEAN

否

false

启用前确认业务允许保留已删除数据。

sink.local-time-zone

date_time 序列化使用的时区。

STRING

否

systemDefault

可根据业务统一配置为 UTC。

sink.parallelism

Sink 算子并行度。

INTEGER

否

无

必须大于 0。

async

是否使用 VikingDB 异步写入。

BOOLEAN

否

false

启用前评估 Collection 和 Index 的可见性延迟。

说明

启用 async=true 会影响数据可见性和检索时效,正式使用前应评估对 VikingDB Collection、Index 和下游查询的影响。

ttl

数据过期时间。

LONG

否

无

单位为秒;不配置或取 0 表示不过期。

vikingdb.field.<字段名>.type

覆盖字段类型推断。

STRING

否

无

仅在默认推断不满足目标 Schema 时配置。

vikingdb.field.<字段名>.dim

指定向量维度。

INTEGER

条件必填

无

稠密向量字段需要与 Collection 维度一致。

Catalog 独有参数

参数

说明

数据类型

是否必填

默认值

备注

type

Catalog 类型。

STRING

是

无

固定为 vikingdb。

control-plane.host

VikingDB 控制面地址。

STRING

是

无

Catalog 管理 Collection 时使用。

project-name

VikingDB 项目名称。

STRING

否

default

—

default-database

Flink Catalog 默认数据库。

STRING

否

default

—

access-key

火山引擎 Access Key。

STRING

条件必填

无

可引用加密变量;与 access-key-env 选择一种。

access-key-env

保存 Access Key 的环境变量名。

STRING

条件必填

无

与 access-key 选择一种。

secret-key

火山引擎 Secret Key。

STRING

条件必填

无

可引用加密变量;与 secret-key-env 选择一种。

secret-key-env

保存 Secret Key 的环境变量名。

STRING

条件必填

无

与 secret-key 选择一种。

Catalog 同时使用“通用连接参数”中的数据面地址、地域和 API Key。

类型映射

Flink 类型

默认 VikingDB 类型

说明

BIGINT / INT / SMALLINT / TINYINT

int64

—

DECIMAL(p, 0)

int64

—

DECIMAL(p, s),且 s > 0

float32

可能发生精度变化,使用前核对业务要求。

FLOAT / DOUBLE

float32

—

BOOLEAN

bool

—

STRING / CHAR / VARCHAR

string

—

ARRAY<STRING>

list<string>

—

整数数组

list<int64>

—

ARRAY<FLOAT> / ARRAY<DOUBLE>

vector

需要配置向量维度。

ARRAY<ARRAY<DOUBLE>>

tensor

—

MAP<STRING, DOUBLE>

sparse_vector

—

ROW<value STRING, fps DOUBLE>

video

用于视频原始字段。

DATE / TIME / TIMESTAMP

date_time

受 sink.local-time-zone 影响。

使用示例

写入 Collection

以下示例将 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。

查看 Collection 元数据

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 操作

说明

INSERT

Upsert

写入完整记录。

UPDATE_AFTER

Upsert

按主键覆盖更新。

DELETE

Delete

默认按主键删除。

UPDATE_BEFORE

Delete

默认删除旧主键记录。

Connector 采用 At-Least-Once 语义。Checkpoint 恢复期间可能重放请求,稳定、唯一且非空的主键是最终结果收敛的前提。
Collection 数据写入成功后,Index 仍需要按照 VikingDB 的同步机制更新检索数据。启用 async=true 或使用异步向量化时,可检索时间可能明显晚于 Collection 点查时间。

验证与排障

验证方法

  1. 提交作业并确认已进入 RUNNING,日志中没有字段类型、向量维度、凭证或连接错误。
  2. 写入一条新主键记录,通过 Collection 点查核对字段内容。
  3. 更新相同主键,确认记录被覆盖,而不是新增重复数据。
  4. 产生 Delete 事件,确认 Collection 中的对应记录被删除。
  5. 检查向量数组长度与 Collection 的 dim 一致,并通过目标 Index 执行样例检索。
  6. 等待 Checkpoint 成功后执行受控重启,确认相同主键的最终记录仍然正确。

常见问题

现象

可能原因

处理建议

提示必须配置主键

DDL 和 primary-key 均未提供有效主键。

在 DDL 中声明单列主键,或通过 primary-key 指定物理字段;不要同时配置两种方式。

向量字段写入失败

数组长度与 Collection 向量维度不一致。

核对 vikingdb.field.<字段名>.dim 和目标 Collection Schema。

写入后暂时检索不到

Collection 到 Index 尚未完成同步,或启用了异步写入/向量化。

先通过 Collection 点查确认写入,再检查 Index 同步状态和异步任务日志。

批量大小不能设置为 200

VikingDB 单次数据写入最多支持 100 条。

将 sink.bulk-flush.batch-size 配置为 1~100。

故障恢复后重复提交

At-Least-Once 恢复期间重放了数据。

使用稳定主键,使 Upsert/Delete 的最终结果收敛。

注意事项

  • Catalog CREATE TABLE 和 DROP TABLE 会直接影响 VikingDB 中的真实 Collection。尤其是 DROP TABLE 会永久删除 Collection 及全部数据,必须谨慎操作。
  • 生产环境必须通过 Flink 加密变量或运行环境变量提供 API Key、AK 和 SK,不要在 SQL 中写入明文凭证。

相关文档

最近更新时间:2026.07.31 09:03:55
这个页面对您有帮助吗?
有用
有用
无用
无用