Flink OSS CDC: 让AI多模态数据处理实时化

你的 AI 客服可能正在用上周的退款政策回答用户,你的以图搜图可能搜不到昨天刚上架的新品,你的内容审核可能漏过了刚上传的待审图片。这些问题不在模型,而在数据工程链路中:上游系统的文件已经变了,但下游系统还不知道。

企业通常将图片、音视频、知识文档和模型权重等多模态数据存放在对象存储 OSS1 中。但 OSS 的设计定位是存储系统,不是消息系统:对象新增、覆盖或删除时,它不会主动向下游广播变更。没有 CDC 式的变更日志,多数数据工程团队只能定时扫描 OSS Bucket,每隔几分钟甚至几小时 List 一次,再把新文件拖进数据处理链路。这种方式的缺陷会随规模放大而加剧:扫描周期决定延迟下限,Bucket 越大 List 成本越高,扫描与写入并发时还容易出现遗漏和重复。

Flink OSS CDC 用事件驱动替代定时轮询:文件一旦写入或覆盖,变更事件即刻通知计算链路,AI 应用实时响应,无需等待下一轮文件目录扫描。

Flink OSS CDC 是阿里云实时计算 Flink 版2内置的变化数据连接器3,自 VVR 11.8.0 起随引擎发布。它将 OSS 事件通知、轻量消息队列 MNS4 和 Flink CDC 框架串成一条链路:OSS 在对象发生变更时推送事件到 MNS,连接器持续消费这些事件,将对象变更转化为标准化的 changelog 流。与数据库 CDC 类似,下游系统无需关心变更是如何被发现的。

这些变更可以进入 Flink CDC YAML 管道,完成转换和路由,再写入 Paimon、Fluss 等下游系统。原先分散在存量扫描和增量监听中的工作,由此整合到一条链路上。

OSS CDC 的主要特性包括:

特性 说明
多种启动模式 支持 initial、snapshot、timestamp 等多种启动模式
断点续传恢复 增量阶段支持从检查点和保存点恢复
路径过滤 支持按一个或多个 Object Key 前缀过滤数据
分区发现 支持通过正则表达式匹配的方式动态读取新分区(目录)数据
元数据透传 支持读取对象的 key、URL、大小、修改时间和 ETag 等元数据
按需读取 默认只发送元数据,也可以调用 FETCH_CONTENT 按需获取文件内容

和其他 CDC 数据源一样,OSS CDC 也支持全增量一体的多种启动模式:

  • **initial 模式:**先枚举 OSS Bucket 中已有的对象,再转入 MNS,持续消费增量变更。
  • **snapshot 模式:**只读取 OSS 中已有的对象,读取完成后任务结束。此模式不需要配置 MNS,也是批处理作业支持的启动模式。
  • **timestamp 模式:**从 scan.startup.timestamp-millis 指定的时间点开始消费 MNS 中的增量消息。
  • **latest-offset 模式:**从任务启动时的最新位置开始消费,只读取此后产生的增量消息。
  • **earliest-offset 模式:**从 MNS 队列中当前最早可用的消息开始消费。
  • **committed-offset 模式:**从 MNS 队列当前的消费进度继续读取,也是默认的启动模式。

OSS CDC 还支持自动从 OSS file key 中识别分区字段,并据此组装 Table ID。例如,如果将 my-bucket 桶里储存的图片按照年、月、日分区保存到 images/2026/07/14/XXX.png 中,可以使用下面的语法解析 Table ID:

yaml 复制代码
source:
  type: oss-cdc
  # ...
  oss-key.to.table-id.matching.pattern: oss://my-bucket/images/([^/]+)/([^/]+)/.*.png

下游即可使用解析出的 Table ID 进行 transform、route 等操作。

2.1 OSS CDC Connector 实现机制

OSS 本身不记录文件变更和操作的详细日志。为了实时捕获 OSS Bucket 中文件的变化,Flink OSS CDC 使用 OSS 官方推荐的「事件通知推送到消息队列」功能,将 OSS Bucket 的变更实时推送到轻量消息队列(MNS)中,以此实现增量阶段的数据消费。

OSS CDC Connector 可以在 Flink CDC YAML、Flink SQL 和 Flink DataStream 作业中使用。使用 Flink CDC YAML 作业时,可以通过 YAML 文本方式开发作业,轻松实现整库(多目录)同步等功能;同时,Flink CDC YAML 管道在下游 sink 支持 upsert 插入语义时,Runtime 框架不会自动加入 Changelog Normalizer 算子节点,可以避免 SQL 作业自带中间算子维护大状态的开销。

initial 启动模式下,OSS CDC 连接器会先从 OSS Bucket 读取快照数据,然后转入 MNS 消费增量数据。这一过程中插入的文件可能会被读取两次。OSS Bucket 中存储的每个文件和版本都拥有唯一的 ETag 标识。在全量转入增量的过程中,连接器使用 ETag 进行唯一性去重,确保下发到下游的数据不重复,且保证最终一致性。

3.1 商品图片上传即向量化,AI 实时检索

业务痛点

电商平台每天都会产生大量商品图片。传统做法通常由离线任务定期扫描 OSS,再批量生成图片向量。新品刚刚上架时,搜图、相似商品推荐和内容审核系统可能还无法识别这些图片。

解决方案

使用 OSS CDC 后,商家只需像平常一样上传商品图片:

plain 复制代码
catalog/bags/2026-07-15/SKU-8842/front.jpg
catalog/shoes/2026-07-15/SKU-1901/side.jpg
catalog/outdoor/2026-07-15/SKU-7712/raincoat.jpg
catalog/beauty/2026-07-15/SKU-4421/perfume.jpg
catalog/sports/2026-07-15/SKU-5501/football-boots.jpg

OSS CDC 会持续捕获新增图片,读取图片内容,并调用多模态模型生成向量:

yaml 复制代码
source:
  type: oss-cdc
  name: Product Image Source
  scan.startup.mode: initial
  oss-endpoint: oss-cn-hangzhou.aliyuncs.com
  oss-bucket: my-bucket
  oss-key.to.table-id.matching.pattern: >-
    oss://my-bucket/catalog/([^/]+)/([^/]+)/.*.(?:jpg|jpeg|png)

transform:
  - source-table: ".*"
    projection: >
      *,
      AI_IMAGE_EMBED(
        'qwen',
        FETCH_CONTENT(`url`)
      ) AS image_embedding

route:
  - source-table: ".*"
    sink-table: ai_media.default.product_images

这里有个设计亮点:OSS CDC 默认只向下游传递 Object Key、URL、ETag、大小和修改时间等元数据,并不会主动拉取对象内容。只有表达式真正调用 FETCH_CONTENT(url) 时,图片才会被读取。

因此,同一条管道既能处理只需保存文件引用的轻量任务,也能承担图片向量化这类需要读取内容的计算。按需读取,无需预先全量拉取文件内容。

本例上传上述商品图片后,下游会得到相应的图片记录,在 sink 中可以观察到如下结果:

plain 复制代码
+I[
  key=catalog/outdoor/2026-07-15/SKU-7712/raincoat.jpg,
  url=oss://my-bucket/catalog/outdoor/2026-07-15/SKU-7712/raincoat.jpg,
  etag=...,
  image_embedding=[...]
]

这些向量可以继续写入 Paimon 或向量检索系统,用于:

  • 以图搜图和相似商品推荐;
  • "适合雨天通勤的外套"等自然语言搜图;
  • 重复图片、盗图和低质量素材识别;
  • 商品类目、颜色、款式等标签的自动补全。

从图片上传到具备 AI 检索能力,中间不再需要额外的定时扫描任务。每一张新图写入 OSS 后,都能随即进入商品智能化链路。

3.2 企业知识库全增量更新,让 RAG 及时感知最新信息

业务痛点

企业知识库最棘手的地方,往往不是第一次导入,而是后续更新。

退款政策、发票规则、产品手册和售后流程随时可能修改。如果向量库仍保存旧版本,AI 客服就可能给出已经过期的答案。

解决方案

本例在 OSS 中准备了一组知识文档:

plain 复制代码
knowledge/store-a/2026-07/refund-policy.md
knowledge/store-a/2026-07/shipping-policy.md
knowledge/store-a/2026-07/warranty-policy.md
knowledge/store-a/2026-07/invoice-policy.md
knowledge/store-a/2026-07/coupon-policy.md
knowledge/store-a/2026-07/account-security.md

通过 initial 模式,OSS CDC 会先读取已有文档,然后自动转入增量阶段,持续捕获后续新增和更新:

yaml 复制代码
source:
  type: oss-cdc
  name: Knowledge Base Source
  scan.startup.mode: initial
  oss-endpoint: oss-cn-hangzhou.aliyuncs.com
  oss-bucket: my-bucket
  oss-key.to.table-id.matching.pattern: >-
    oss://my-bucket/knowledge/([^/]+)/([^/]+)/.*.(?:md|txt)

transform:
  - source-table: ".*"
    projection: >
      *,
      AI_EMBED(
        'qwen',
        FETCH_CONTENT(`url`)
      ) AS content_embedding

route:
  - source-table: ".*"
    sink-table: enterprise_ai.default.knowledge_documents

初始版本的 refund-policy.md 中规定:

商品签收后 7 天内,用户可以申请无理由退款。

此时向知识库提问:

商品签收后多久可以无理由退款?

得到的答案应为:

商品签收后 7 天内可以申请无理由退款。

随后,用新版本覆盖 OSS 中原来的 Object Key:

plain 复制代码
ossutil cp -f knowledge-updates/refund-policy-v2.md \
  oss://my-bucket/knowledge/store-a/2026-07/refund-policy.md

新版本将退款期限调整为:

自 2026 年 7 月 15 日起,商品签收后 15 天内可以申请无理由退款。

OSS CDC 会捕获这次覆盖操作。由于文件内容发生变化,Object 的 ETag 也会改变,下游可收到对应的更新记录。重新提问后,知识库即可根据新版本回答:

自 2026 年 7 月 15 日起,商品签收后 15 天内可以申请无理由退款。

这个例子展示了 OSS CDC 在 RAG 场景中的核心价值:知识文件发生变化时,向量化和入库可以随之发生,从而避免 AI 基于过期信息作答。

这一模式还适用于:

  • 企业规章、产品手册和技术文档;
  • AI 客服与内部知识助手;
  • 合同、公告和研究报告的实时索引;
  • 多门店、多部门知识库的统一汇聚。

长期以来,OSS 解决的是"存得下"的问题。但在 AI 时代,"变更能被下游实时感知"才是数据产生价值的关键一步。Flink OSS CDC 补上的正是这一环:它将 OSS 事件通知、轻量消息队列 MNS 和 Flink CDC 管道接在一条链路上,配合路径过滤、分区发现、断点恢复和按需读取等能力,使对象数据既能从存量开始读取,也能持续捕获后续变更,避免全量扫描的成本和开销。

回看前面两个场景,它们其实是同一件事的两面:商品图片上传即向量化,解决的是"新数据实时进入 AI 链路";知识库文档覆盖即更新,解决的是"存量数据变化后 AI 不再读到旧版本"。一个面向新增,一个面向更新,合起来构成了对象数据接入 AI 应用的完整实时闭环。

对于以图搜图、多模态检索、RAG 知识库这类数据持续增长的业务,当对象存储从静态仓库变为实时数据源,每一份新数据、每一次变更都能及时抵达下游。围绕对象存储构建面向 AI 的数据管道,便是自然的选择。

参考文档:

  • 1阿里云对象存储 OSS,一种大规模、可靠的对象存储服务。OSS 以对象(Object)为基本存储单元,并通过存储桶(Bucket)和 Object Key 组织、访问数据。对象内容不受文件格式限制,适合存储音视频、图片、模型权重等非结构化或多模态数据。
  • 2阿里云实时计算 Flink 版,AI-Native 的一站式实时数据云平台,提供企业级、高性能、全托管 Serverless Flink 云服务,具备全模态数据流式处理能力,在处理性能、结构化算子、实时增量处理、连接器生态及容错能力等维度具有差异化优势。
  • 3Flink OSS CDC 连接器,实时计算 VVR 引擎 11.8.0 及更高版本内置的变化数据连接器,支持从对象存储 OSS 全增量一体、高吞吐、低延迟地读取对象文件的变更,供下游系统计算及消费使用。
  • 4轻量消息队列 MNS,是一种高效、可靠、可弹性扩展的分布式消息服务。
相关推荐
阿里云大数据AI技术17 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
空杆推不起2 天前
穿透 Flink CDC 表层用法:数据库日志捕获机制、Flink Source 运行时、端到端一致性底层原理详解
大数据·数据库·flink
tian_jiangnan5 天前
Flink 流计算进阶:手写一套通用的 Redis/MySQL /Kafka数据源封装工具类
redis·mysql·flink
abcy07121310 天前
flink datastream调用8种分区策略实例
flink
yqj23411 天前
Flink集群配置与部署全攻略
大数据·flink
abcy07121311 天前
spark核心组件
flink·spark
Apache Flink12 天前
全模态入湖,把大模型接入实时湖仓:Flink OSS CDC + DLF Paimon 实现零代码以图搜图
大数据·flink
翔云12345613 天前
Kafka + Flink实时时流处理场景
flink·kafka
abcy07121314 天前
flink state实例
大数据·算法·flink