Apache Beam:维护分布式 KV 中的状态 table

Apache Beam: maintaining state in distributed KV table

我正在尝试更好地理解 Beam 计算模型并检查我的问题是否可以在此模型中解决。

假设我有一个事件流,

class Event {
    public int userId;
    public int score;
}

我想构建管道:

我读过 stateful processing 据我了解,在 StatefulParDo 中为用户保持最高分数很容易。但是这种状态是如何存储的是 Beam 的实现细节,并且这种状态在 StatefulParDo 函数之外不可用。

是否可以在某种 KV 存储中以明确定义的格式保存此类状态,以供外部消费者(我的管道之外的读取器)使用?

因此您必须选择 Beam State API 或外部存储系统。

Beam State 的确切存储位置取决于 运行ner。您无法在州 API.

之外直接访问此类州

如果您决定使用外部存储路径,您可以从 Beam ParDo 写入此类存储系统。但是当 reading/writing 和此类数据的一致性时,您必须处理性能。此外,您还必须假设任何 Beam 步骤都可能失败,并且可能会被 运行ner 重新 运行(因此应该防止重复写入)。