SuperAPI AI 工具集

adding-new-metadata

数据与分析

查看项目

更新于 10-16 05:00

技能介绍

用途:指导在 Apache Beam 的 WindowedValue 中新增元数据(如 CDC 元数据、drain 模式标志、OpenTelemetry trace context),并确保其在执行引擎中正确传播;若遗漏传播点,元数据会在流水线执行中静默丢失。

主要能力与步骤:

  1. 扩展 Proto 模型:在 model/fn-execution/src/main/proto/org/apache/beam/model/fn_execution/v1/beam_fn_api.proto 的 ElementMetadata 消息中添加字段,并补充文档;字段类型可与 WindowedValue 中不同。
  2. 更新 WindowedValue 接口与实现:在 sdks/java/core/src/main/java/org/apache/beam/sdk/values/WindowedValue.java 添加 getter;更新 ValueInGlobalWindow、ValueInSingleWindow、ValueInEmptyWindows 的构造器、of() 工厂方法、字段与 coder。不要给 context.outputWindowedValue(...) 或 WindowedValue.of(value, timestamp, windows, pane) 等旧方法加参数,应改用 OutputBuilder(如 .withDrainMode(...)、.withTraceContext(...))。
  3. Windmill 持久化:在 WindmillSink 中序列化元数据到 ElementMetadata;在 UngroupedWindmillReader 与 WindowingWindmillReader 中反序列化并重建 WindowedValue;同时更新 WindmillKeyedWorkItem。
  4. 核心类传播:在 SimpleDoFnRunner、StatefulDoFnRunner、LateDataDroppingDoFnRunner、ProcessFnRunner、FnApiDoFnRunner 输出时附加元数据;在 ReduceFnRunner、ReduceFnContextFactory 中处理 GroupByKey/Combine 的元数据保留;Splittable DoFn 相关类也需处理。
  5. 定时器:若元数据需跨定时器触发保留,需在 TimerData 与 TimerInternals(如 WindmillTimerInternals)中新增字段并传播;资料指出该领域尚不成熟,目前仅 CausedByDrain 由后端实现,持久化全部 WindowedValue 元数据仍需更多工作。
  6. 暴露给用户:更新 DoFnSignatures、DoFnSignature、DoFnInvoker、ByteBuddyDoFnInvokerFactory,检测 DoFn 方法签名中的新参数类型,并用 ByteBuddy 生成字节码提取属性传入。

适用场景:为 Beam 添加需跨 worker 边界或经 Fn API 序列化的新元数据,并希望用户 DoFn 能访问。

限制:需同步更新 Flink、Spark 等其他 Runner;资料未提供具体代码示例、版本要求或测试方法。