Apache Beam Python SDK 是否丢弃了延迟数据,或者只是无法配置延迟参数?



我的用例是,我尝试使用来自Google PubSub订阅的Apache Beam Python SDK聚合数据,使用1小时窗口。我已经像这样配置了我的管道窗口:

beam.WindowInto(
window.FixedWindows(60 * 60, 0),
trigger=AfterWatermark(
early=AfterCount(1),
late=AfterCount(1)),
accumulation_mode=AccumulationMode.ACCUMULATING)

我的问题是我应该看到每个窗口大约 60 条消息,而我最多只能看到 45-46 条消息,通常低于这个数字。

一些研究现在让我相信 Beam 可能会丢弃它认为很晚的任何数据,即使我以这种方式设置了触发器。Beam Streaming 文档提到Beam SDK for Python 目前不支持允许的延迟。我不清楚的是它是否不支持设置特定的延迟配置,或者它是否完全丢弃了延迟数据。

L.E:看来我的完整数据集确实存在,但是关于使用 Python SDK 在 Beam 中处理后期数据的一些澄清将有助于设定期望。

所以我的问题实际上是PubSub传递消息有时会非常混乱。虽然大方向是从旧到新的,但如果有 2-3 天的数据积压,您可以看到 10-48 小时的点差。如果收集了完整的缓冲区,则实际上不会丢弃任何数据。

不使用DirectRunner而是DataflowRunner时,该问题得到了缓解,因为在Dataflow服务器上运行管道时吞吐量要高得多。

有关丢弃延迟数据的问题仍未记录(文档仅提到截至 2019 年 9 月,Python 目前不支持配置数据延迟策略(。使用上述设置似乎正确触发了延迟数据。

相关内容

最新更新