Apache Beam Python SDK 会丢弃延迟数据,还是无法配置延迟参数?
Posted
技术标签:
【中文标题】Apache Beam Python SDK 会丢弃延迟数据,还是无法配置延迟参数?【英文标题】:Does the Apache Beam Python SDK discard late data, or is it just impossible to configure lateness params? 【发布时间】:2019-12-14 19:36:19 【问题描述】:我的用例是我尝试使用 Apache Beam Python SDK 聚合来自 Google 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 文档提到 Beam SDK for Python 目前不支持允许的延迟。 我不清楚它是否不支持设置特定的延迟配置,或者它是否完全丢弃延迟数据.
L.E:我的完整数据集似乎确实存在,但是关于使用 Python SDK 在 Beam 中处理后期数据的一些说明将有助于设定预期。
【问题讨论】:
“如果我以这种方式设置触发器”是什么意思? 我的意思是我将窗口触发器设置为在每个早期和晚期事件之后触发。虽然我仍然不能 100% 确定 Beam for Python 如何处理数据延迟,但我的问题有所不同(在下面的答案中指定)。 【参考方案1】:所以我的问题实际上是PubSub
有时会严重乱序传递消息。虽然总体方向是从旧到新,但如果有 2-3 天的数据积压,您可以看到 10-48 小时的价差。如果收集了完整的缓冲区,则实际上不会丢弃任何数据。
不使用DirectRunner
而是使用DataflowRunner
时问题得到缓解,因为在Dataflow
服务器上运行管道时吞吐量要高得多。
关于丢弃延迟数据的问题仍未记录(文档仅提到,截至 2019 年 9 月,Python 目前不支持配置数据延迟策略)。使用上述设置似乎可以正确触发延迟数据。
【讨论】:
以上是关于Apache Beam Python SDK 会丢弃延迟数据,还是无法配置延迟参数?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何使用 python sdk 在 Apache Beam 中读取带有附件的 CSV 文件?
Apache Beam - org.apache.beam.sdk.util.UserCodeException:java.sql.SQLException:无法创建 PoolableConnecti
Beam编程系列之Java SDK Quickstart(官网的推荐步骤)
带有 DirectRunner 的 Apache Beam (SUBPROCESS_SDK) 仅使用一个工作人员,我如何强制它使用所有可用的工作人员?