Apache Beam 状态 Management/Processing - 在 Window 范围内跨 ParDo 共享状态?
Apache Beam State Management/Processing - Sharing State across ParDo at the Window Scope?
我的数据流管道将事件数据整理成按会话和按用户 PCollections 输出的类型。我已将 GroupByKey 用于按会话 ID 键控的事件。会话被分组到由用户 ID 和设备 ID 键控的父类型中,在下一层层次结构中使用相同的模式。因此单个会话可能会生成许多事件,但反过来单个用户可能会生成多个会话。
我现在想总结层次结构中每个级别的数据。我使用了 StateSpec 声明来在事件级别保持状态。因此,例如,事件计数 属性 可以在我的事件处理 ParDo 中递增。 (用例:例如,在所有用户的每个会话中生成一个错误事件。)
但是由于每个 ParDo 都是静态的 - 我无法访问 ParDo 上下文之外的 ValueState,即使我的理解是此状态保持在 Window 范围内。 (也许这是设计使然。)有没有一种方法可以使用另一个 ParDo 中的 Beam State 持久性库访问此 Window 级别状态,而不是最初声明的位置?好像我可以在管道级别声明它?
我知道这可能会引入一些性能开销,因为框架必须管理并发性,但实际处理似乎可以忽略不计。 (只是增加值。)所以我更愿意将其写入 window 级别状态字段,而不是通过我的层次结构向上渗透值。
不支持跨 ParDos 的状态共享,甚至不应该鼓励这样做,因为它会在 ParDos 之间带来依赖关系,这会破坏简单的契约:ParDo 可以独立地在 PCollection 上工作,从而解除大规模并行性。
我的数据流管道将事件数据整理成按会话和按用户 PCollections 输出的类型。我已将 GroupByKey 用于按会话 ID 键控的事件。会话被分组到由用户 ID 和设备 ID 键控的父类型中,在下一层层次结构中使用相同的模式。因此单个会话可能会生成许多事件,但反过来单个用户可能会生成多个会话。
我现在想总结层次结构中每个级别的数据。我使用了 StateSpec 声明来在事件级别保持状态。因此,例如,事件计数 属性 可以在我的事件处理 ParDo 中递增。 (用例:例如,在所有用户的每个会话中生成一个错误事件。)
但是由于每个 ParDo 都是静态的 - 我无法访问 ParDo 上下文之外的 ValueState,即使我的理解是此状态保持在 Window 范围内。 (也许这是设计使然。)有没有一种方法可以使用另一个 ParDo 中的 Beam State 持久性库访问此 Window 级别状态,而不是最初声明的位置?好像我可以在管道级别声明它?
我知道这可能会引入一些性能开销,因为框架必须管理并发性,但实际处理似乎可以忽略不计。 (只是增加值。)所以我更愿意将其写入 window 级别状态字段,而不是通过我的层次结构向上渗透值。
不支持跨 ParDos 的状态共享,甚至不应该鼓励这样做,因为它会在 ParDos 之间带来依赖关系,这会破坏简单的契约:ParDo 可以独立地在 PCollection 上工作,从而解除大规模并行性。