首页 > 解决方案 > Apache Beam Python SDK 会丢弃延迟数据,还是无法配置延迟参数?

问题描述

我的用例是我正在尝试使用Apache Beam Python SDKGoogle PubSub订阅中使用 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 文档提到The Beam SDK for Python 目前不支持允许的延迟。我不清楚的是它是否不支持设置特定的延迟配置,或者它是否完全丢弃延迟数据。

LE:看起来我的完整数据集确实存在,但是关于使用 Python SDK 在 Beam 中处理后期数据的一些说明将有助于设定预期。

标签: python-3.xapache-beamgoogle-cloud-pubsubapache-beam-io

解决方案


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

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

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


推荐阅读