apache-beam - GroupByKey 不更新很长的 PTransform 与窗口
问题描述
我正在研究在 Google Cloud Dataflow 中运行的流式 Java Apache Beam (2.13.0) 管道。我有一个长时间运行的 PTransform(对于单个输入,它做了很多工作,输出多个输出并且可能需要超过 10 分钟)。
我想将处理的早期结果返回给用户。之后我有一个窗口和组合步骤。早期触发器似乎不适用于长时间运行的 PTransform。在 PTransform 处理完元素(而不是返回早期结果)之后,Combine 步骤会输出元素。
我尝试了许多不同的早期窗口功能。例如,我尝试过永久元素计数触发器,但它不起作用。同样适用于永远处理基于时间的触发器(例如,每 10 秒处理一次)。我尝试过 GlobalWindows、Fixed Windows、Session Windows 等。
这是我正在做的粗略伪代码。
p.apply(PubsubIO.readStrings().fromSubscription(options.getInput()));
.apply(FlatMapElements.via(new LongRunningCalculation()))
.apply(<I've tried a variety of window functions>)
.apply(Combine.perKey(new SumMetrics()))
.apply(DatastoreIO.v1().write().withProjectId(options.getProject()));
对于 Window 函数,我尝试了许多不同的 Window 函数,看看是否可以提前返回。我不能让它早点回来。
这是一个基本的。
Window.into(new GlobalWindows())
.triggering(Repeatedly.forever(AfterPane.elementCountAtLeast(10)))
.withAllowedLateness(Duration.ZERO)
.discardingFiredPanes());
即使对于这个,即使Window已经添加了>>10个元素,Combine步骤中的GroupBy也不会输出任何行。
预期:如果我有一个长期运行的 PTransform,我仍然希望早期触发器仍然会触发。
实际:我似乎无法让早期触发器起作用。
有什么建议吗?
解决方案
推荐阅读
- r - 使用粘贴在 R 中打印序列
- regex - 如何在 Pyspark 中多次匹配正则表达式模式?
- c# - 除非之前打开过文档,否则 EPPlus 无法获取单元格值
- c# - 棱镜取消导航 WPF
- sql-server - 如何根据日期字段计算免税销售额?
- rust - 如何通过命令行指定库的输出文件名?
- excel - 具有动态锚单元的每个第 n 个单元的偏移量
- vue.js - Vue.D3.tree - 显示树的 Vue 组件无法正常工作
- java - 使用 Java 从 Sb0t 聊天服务器正确读取套接字数据包
- visual-studio - VS2019-Preview-Professional-Debug 模式整数值以某种哈希类型显示