你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
数据流图的 WebAssembly (WASM) 图定义现在为预览状态。 此功能具有限制,不适用于生产工作负载。
有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
图定义是 WASM 开发的核心,因为它们定义了模块如何连接到处理工作流。 了解图定义与数据流图之间的关系有助于你进行高效开发。
本文重点介绍如何创建和配置 YAML 图定义。 有关部署和测试 WASM 数据流图的信息,请参阅将 WebAssembly 与数据流图配合使用。
重要
数据流图目前仅支持 MQTT、Kafka 和 OpenTelemetry 终结点。 不支持其他终结点类型,例如 Data Lake、Microsoft Fabric OneLake、Azure 数据资源管理器和本地存储。 有关详细信息,请参阅 已知问题。
图定义结构
图定义遵循一种正式的 JSON 架构,该架构会验证结构并确保兼容性。 配置包括:
- 针对 API 和主机库版本兼容性的模块要求
- 针对运行时参数和运算符自定义的模块配置
- 在工作流中定义处理节点的操作
- 指定操作之间的数据流路由的连接
- 用于可选数据验证的架构
基本图结构
moduleRequirements:
apiVersion: "0.2.0"
hostlibVersion: "0.2.0"
operations:
- operationType: "source"
name: "data-source"
- operationType: "map"
name: "my-operator/map"
module: "my-operator:1.0.0"
- operationType: "sink"
name: "data-sink"
connections:
- from: { name: "data-source" }
to: { name: "my-operator/map" }
- from: { name: "my-operator/map" }
to: { name: "data-sink" }
版本兼容性
moduleRequirements 部分通过语义化版本控制来确保兼容性:
moduleRequirements:
apiVersion: "0.2.0" # WASI API version for interface compatibility
hostlibVersion: "0.2.0" # Host library version providing runtime support
features: # Optional features required by modules
- name: "wasi-nn"
小窍门
有关使用 wasi-nn 功能启用带内 ONNX 推理的指导,请参阅在 WebAssembly 数据流图中运行 ONNX 推理。
示例 1:简单图定义
简单图定义演示了一个基本的三阶段管道,该管道将温度数据从华氏度转换为摄氏度:
有关此示例的分步部署说明和测试指南,请参阅示例 1:使用一个 WASM 模块进行基本部署。
简单图的工作原理
此图会创建一个简单的数据处理管道:
- 源操作:从数据流的源终结点接收温度数据
-
映射操作:使用温度 WASM 模块 (
temperature:1.0.0) 处理数据 - 接收器操作:将转换后的数据发送到数据流的目标终结点
温度模块使用标准公式 (F - 32) × 5/9 = C 将华氏度转换为摄氏度。
输入格式:
{"temperature": {"value": 100.0, "unit": "F"}}
输出格式:
{"temperature": {"value": 37.8, "unit": "C"}}
示例 2:复杂图定义
复杂图定义演示了一个复杂的多传感器处理工作流,该工作流使用高级分析处理温度、湿度和图像数据:
有关此示例的分步部署说明和测试指南,请参阅示例 2:部署复杂图。
复杂图的工作原理
复杂图可处理三个数据流,并将其组合到扩充的传感器分析中:
如图所示,数据从单个源发出,经过多个处理阶段:
- 窗口模块:延迟传入数据以便进行基于时间的处理
- 分支操作:基于内容类型路由数据(传感器数据与快照)
-
温度处理路径:
- 将华氏度转换为摄氏度
- 筛选无效读数
- 计算一段时间内的统计摘要
-
湿度处理路径:
- 通过统计分析累积湿度度量值
-
图像处理路径:
- 设置图像数据的格式以供处理
- 对相机快照执行对象检测
-
最终聚合:
- 连接所有已处理的数据流
- 聚合多传感器结果
- 添加元数据和超温警报
图形使用来自 Rust 示例的专用模块:
- 基于时间的处理延迟的窗口模块
- 用于转换、筛选和统计分析的温度模块
- 用于环境数据处理的湿度模块
- 用于图像数据路由和对象检测的快照模块
- 用于图像处理准备的格式模块
- 用于多传感器数据聚合的收集模块
- 用于添加元数据和生成警报的扩充模块
分支操作支持对不同的传感器输入进行并行处理,从而允许图形在单个工作流中高效处理多个数据类型。
图定义如何成为数据流
下面显示了图定义与 Azure IoT 操作数据流图之间的关系:
YAML 文件以源/接收器操作作为抽象终结点,定义了内部处理逻辑。 这将成为图定义项目。 所引用的模块将实际处理运算符作为 WASM 模块实现。 图定义和 WASM 模块都作为注册表存储的 OCI 项目上传到容器注册表(例如 Azure 容器注册表)。
Azure 资源管理器或 Kubernetes 资源会“包装”图定义,并将其作为数据流图资源连接到实际终结点。 在运行时部署期间,数据流引擎会从注册表拉取项目并部署这些项目。 对于终结点映射,图中的抽象源/接收器操作会连接到实际的 MQTT 主题、Azure 事件中心或其他数据源。
例如,此示意图展示了图定义、WASM 模块和数据流图之间的关系:
注册表部署
必须先将图定义和 WASM 模块作为开放容器计划 (OCI) 项目上传到容器注册表,然后数据流图才能引用它们:
- 图定义打包为 OCI 项目,其中媒体类型为
application/vnd.oci.image.config.v1+json - WASM 模块打包为 OCI 项目,其中包含已编译的 WebAssembly 二进制文件
- 使用语义化版本控制(例如
my-graph:1.0.0、temperature-converter:2.1.0)进行适当的依赖项管理 - 注册表支持与 Azure 容器注册表、Docker Hub 和其他符合 OCI 的注册表兼容
这种分离实现可重用逻辑,其中使用不同的终结点部署相同的图定义。 它提供环境独立性,其中开发环境、过渡环境和生产环境使用不同的数据源。 它还支持模块化部署,在该部署中,无需更改处理逻辑即可更新终结点配置。
有关将图定义和 WASM 模块上传到注册表的详细说明,请参阅将 WebAssembly 与数据流图配合使用。 有关完整的部署工作流(包括注册表设置、身份验证和测试),请查看该指南中的示例。
模块配置参数
图定义可通过模块配置为 WASM 运算符指定运行时参数:
moduleConfigurations:
- name: my-operator/map
parameters:
threshold:
name: temperature_threshold
description: "Temperature threshold for filtering"
required: true
unit:
name: output_unit
description: "Output temperature unit"
required: false
这些参数在运行时传递给 WASM 运算符的 init 函数,无需重新生成模块就能启用动态配置。 有关如何在 Rust 和 Python 代码中访问和使用这些参数的详细示例,请参阅模块配置参数。
有关完整的实现示例,请参阅分支模块,其中演示了条件路由逻辑的参数用法。