Apache Beam:维护分布式 KV 中的状态 table
Apache Beam: maintaining state in distributed KV table
我正在尝试更好地理解 Beam 计算模型并检查我的问题是否可以在此模型中解决。
假设我有一个事件流,
class Event {
public int userId;
public int score;
}
我想构建管道:
- 读取
Event
s 的流
- 维护分布式 KV table(我们可能使用 Apache Cassandra 或任何其他类似系统)
- 关键是
userId
- 值是用户的最高得分
我读过 stateful processing
据我了解,在 StatefulParDo 中为用户保持最高分数很容易。但是这种状态是如何存储的是 Beam 的实现细节,并且这种状态在 StatefulParDo 函数之外不可用。
是否可以在某种 KV 存储中以明确定义的格式保存此类状态,以供外部消费者(我的管道之外的读取器)使用?
因此您必须选择 Beam State API 或外部存储系统。
Beam State 的确切存储位置取决于 运行ner。您无法在州 API.
之外直接访问此类州
如果您决定使用外部存储路径,您可以从 Beam ParDo
写入此类存储系统。但是当 reading/writing 和此类数据的一致性时,您必须处理性能。此外,您还必须假设任何 Beam 步骤都可能失败,并且可能会被 运行ner 重新 运行(因此应该防止重复写入)。
我正在尝试更好地理解 Beam 计算模型并检查我的问题是否可以在此模型中解决。
假设我有一个事件流,
class Event {
public int userId;
public int score;
}
我想构建管道:
- 读取
Event
s 的流
- 维护分布式 KV table(我们可能使用 Apache Cassandra 或任何其他类似系统)
- 关键是
userId
- 值是用户的最高得分
- 关键是
我读过 stateful processing 据我了解,在 StatefulParDo 中为用户保持最高分数很容易。但是这种状态是如何存储的是 Beam 的实现细节,并且这种状态在 StatefulParDo 函数之外不可用。
是否可以在某种 KV 存储中以明确定义的格式保存此类状态,以供外部消费者(我的管道之外的读取器)使用?
因此您必须选择 Beam State API 或外部存储系统。
Beam State 的确切存储位置取决于 运行ner。您无法在州 API.
之外直接访问此类州如果您决定使用外部存储路径,您可以从 Beam ParDo
写入此类存储系统。但是当 reading/writing 和此类数据的一致性时,您必须处理性能。此外,您还必须假设任何 Beam 步骤都可能失败,并且可能会被 运行ner 重新 运行(因此应该防止重复写入)。