在达到elementCountAtLeast之前触发Google Dataflow触发器

时间:2016-10-06 14:57:39

标签: google-cloud-dataflow

我计划使用Google Dataflow来协调人工循环表单的完成,并在完成3个表单后检查冲突。我已经为数据流源和接收器设置了Google PubSub,并且只想触发触发器并在收到给定JobId的三个表单后发送到PubSub接收器。

This SO post看起来类似于我试图解决的问题,但是当我实现它时,触发器正在触发并在到达AfterPane.elementCountAtLeast之前将输出发送到PubSub接收器。

我已尝试使用GlobalWindowSlidingWindow s。在达到elementCountAtLeast后我触发了触发器,我计划为GroupByKey实施jobId。但是,在我迈向这一步之前,我想让elementCountAtLeast孤立地工作。

以下是从PubSub和SlidingWindow

中读取的代码
PCollection<String> humanInTheLoopInput;
humanInTheLoopInput = pipeline
    .apply(PubsubIO.Read
           .named("ReadFromHumanInTheLoopSubscription")
           .subscription(options.getInputHumanInTheLoopRawSubscription()));

PCollection<String> windowedInput = humanInTheLoopInput
    .apply(Window
           .<String>into(SlidingWindows
                         .of(Duration.standardSeconds(30))
                         .every(Duration.standardSeconds(5)))
           .<String>triggering(Repeatedly.forever(AfterPane.elementCountAtLeast(3)))
           .discardingFiredPanes()
           .withAllowedLateness(Duration.standardDays(10)));

1 个答案:

答案 0 :(得分:2)

如果没有GroupByKey,则不会触发任何内容。窗口化和触发仅影响分组(和组合)操作。