python-3.x - Apache Beam Python SDK 会丢弃延迟数据,还是无法配置延迟参数?
问题描述
我的用例是我正在尝试使用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 文档提到The Beam SDK for Python 目前不支持允许的延迟。我不清楚的是它是否不支持设置特定的延迟配置,或者它是否完全丢弃延迟数据。
LE:看起来我的完整数据集确实存在,但是关于使用 Python SDK 在 Beam 中处理后期数据的一些说明将有助于设定预期。
解决方案
所以我的问题实际上是PubSub
有时会严重乱序传递消息。虽然总体方向是从旧到新,但如果有 2-3 天的数据积压,您可以看到 10-48 小时的差价。如果收集了完整的缓冲区,则实际上不会丢弃任何数据。
不使用DirectRunner
but时问题得到缓解,因为在服务器DataflowRunner
上运行管道时吞吐量要高得多。Dataflow
关于丢弃延迟数据的问题仍然没有记录(文档仅提到,截至 2019 年 9 月,Python 目前不支持配置数据延迟策略)。使用上述设置似乎可以正确触发延迟数据。
推荐阅读
- c# - 在异步方法中处理多个同步网络调用?
- jenkins-pipeline - 从 github 签出 Jenkinsfile 时,Jenkins 管道失败
- angular - Angular 8:将 utils 服务定义为单例并使用静态方法?
- angular - 使用带有 JSONP 获取和错误的 Flicker 公共提要
- xcode - Xcode 连接视图控制器
- angular - aws-amplify S3 存储上传文件,但将它们设置为“私有”,尽管有明确的公共访问配置
- typescript - 无法将传单导入 TypeScript
- reactjs - 使用 withFormik 的动态 Formik 表单
- reporting-services - SSRS 图表显示沿 x 轴的部门的员工列表以及他们有权访问的符号 / x
- sorting - 如果变量包含批处理中的特定字符串,如何过滤变量