Google cloud dataflow 为什么我的fusion breaker会丢失或保留数据?

Google cloud dataflow 为什么我的fusion breaker会丢失或保留数据?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在开发一个流式数据流管道,它使用来自PubSub的批处理项目的消息,并最终将它们写入数据存储。为了更好的并行性,也为了及时确认从PubSub中提取的消息,我将批处理解包成单独的项目,并在其后面添加一个fusion breaker 所以管道看起来像这样 发布->反序列化->解包->融合中断->验证/转换->数据存储 这是我的fusion breaker,大部分是复制自。它使用触发器分解全局窗口中的数据 公共类BreakFusionTransform扩展了PTransform{ @凌驾 公共PC

我正在开发一个流式数据流管道,它使用来自PubSub的批处理项目的消息,并最终将它们写入数据存储。为了更好的并行性,也为了及时确认从PubSub中提取的消息,我将批处理解包成单独的项目,并在其后面添加一个fusion breaker

所以管道看起来像这样

发布->反序列化->解包->融合中断->验证/转换->数据存储

这是我的fusion breaker,大部分是复制自。它使用触发器分解全局窗口中的数据

公共类BreakFusionTransform扩展了PTransform{ @凌驾 公共PCollection expandPCollection输入{ 返回输入 .applyParDo.of新随机键fn .applyWindow 永远 后处理时间 .pastFirstElementInPane .plusDelayOfDuration.Standards秒2L .丢弃燃烧的汽油 .applyGroupByKey.create .applyValues.create .applyFlatten.iterables; } 私有静态类RandomKeyFn扩展了DoFn{ 私有随机; @设置 公共空间设置{ 随机=新随机; } @过程元素 公共void processElementProcessContext上下文{ context.outputKV.ofrandom.nextInt,context.element; } } } 它在大多数情况下都能工作,但在某些情况下,它生成的输出数少于输入数,即使在流式输入完成且管道闲置10分钟后也是如此

如下面的数据流作业监视控制台所示。屏幕截图是在作业耗尽后拍摄的,我等待了大约10分钟,等待数据从转换中出来

*有人能想出一个解释吗?感觉熔合断路器正在后退或丢失了一些物品。*

<>我注意到只有当数据量/数据速率很高时,迫使流水线在测试运行期间放大,从25倍提高到50 N1-HIMME-2工人。然而,我还没有做足够的测试来验证放大是否是重现这个问题的关键

或者是每两秒钟触发一次的频率太高了


我使用的是数据流2.0.0-beta1。作业Id为2017-02-23_23_15_34-1402542448477508627。

流式数据流中的计数器是最好的措施;特别是自动缩放可能会导致更大的差异。在这种情况下,管道不应丢失数据