Google cloud dataflow GroupByKey在Google云数据流中不返回任何元素

Google cloud dataflow GroupByKey在Google云数据流中不返回任何元素,google-cloud-dataflow,Google Cloud Dataflow,我不熟悉数据流,所以这可能是一个简单的问题 我想试试会话窗口策略。根据windowing文档,在我们完成GroupByKey之前,不会应用windowing,所以我正在尝试这样做 然而,当我在Google云平台中查看我的管道时,我可以看到MapElements返回元素,但GroupByKey没有返回任何元素(“添加的元素:-”)。按键分组时我做错了什么 以下是代码中最相关的部分: events = events .apply(Window.named("eventsSessionsWindo

我不熟悉数据流,所以这可能是一个简单的问题

我想试试会话窗口策略。根据windowing文档,在我们完成GroupByKey之前,不会应用windowing,所以我正在尝试这样做

然而,当我在Google云平台中查看我的管道时,我可以看到MapElements返回元素,但GroupByKey没有返回任何元素(“添加的元素:-”)。按键分组时我做错了什么

以下是代码中最相关的部分:

events = events
  .apply(Window.named("eventsSessionsWindowing")
    .<MyEvent>into(Sessions.withGapDuration(Duration.standardSeconds(3)))
  );

PCollection<KV<String, MyEvent>> eventsKV = events
  .apply(MapElements
    .via((MyEvent e) -> KV.of(ExtractKey(e), e))
    .withOutputType(new TypeDescriptor<KV<String, MyEvent>>() {}));

PCollection<KV<String, Iterable<MyEvent>>> eventsGrouped = eventsKV.apply(GroupByKey.<String, MyEvent>create());
events=事件
.apply(Window.named(“eventsSessionsWindowing”)
.into(Sessions.withGapDuration(持续时间.standardSeconds(3)))
);
PCollection events skv=事件
.apply(映射元素)
.通孔((MyEvent e)->千伏of(拔出键(e),e))
.withOutputType(新类型描述符(){}));
PCollection eventsGrouped=eventsKV.apply(GroupByKey.create());

A
GroupByKey
根据触发策略触发,该触发策略确定系统何时认为已接收到此键/窗口的所有数据,以及何时将其分组并传递给下游转换。默认策略是:

PCollection的默认触发器是基于事件时间的,当系统的水印(Dataflow关于何时“应该”拥有所有数据的概念)通过窗口末尾时,会发出窗口结果


详情请参阅。您看到了与PubSub的水印进程相对应的几分钟延迟。

a
GroupByKey
根据触发策略触发,该触发策略确定系统何时认为已收到此密钥/窗口的所有数据,以及将其分组并传递给下游变换的时间。默认策略是:

PCollection的默认触发器是基于事件时间的,当系统的水印(Dataflow关于何时“应该”拥有所有数据的概念)通过窗口末尾时,会发出窗口结果


详情请参阅。您看到了几分钟的延迟,这与PubSub的水印的进展相对应。

一些问题有助于调试。这是批处理管道还是流式管道?您使用的是哪种runner(direct、dataflow、spark、flink等)?问题是否会在direct runner中重现?除了“elements added”(添加的元素)消息外,您是否有其他证据表明GBK中没有任何元素?例如,如果您在其后添加另一个ParDo将分组的KVs写入TextIO,它是否会以空输出结束?它是一个流式管道(我们从pubsub读取),使用DataflowPipelineRunner。还没有试过直接跑步者。我尝试在GroupByKey之后的ParDo中输出调试信息,但没有输出任何内容。我正在使用LOG.info(…)(我知道它是有效的)进行调试。虽然GroupByKey中没有添加任何元素,但它有时会在Google云中的GroupByKey框中显示“1个元素/s”。我现在发现GroupByKey实际上是有效的,只是速度非常慢。我不得不等待几分钟,日志输出才会出现。GroupByKeys应该花那么长时间,还是更可能是我做了傻事。目前,我们没有给数据流提供太多的数据。我似乎已经通过添加触发解决了延迟问题。有几个问题可以帮助调试。这是批处理管道还是流式管道?您使用的是哪种runner(direct、dataflow、spark、flink等)?问题是否会在direct runner中重现?除了“elements added”(添加的元素)消息外,您是否有其他证据表明GBK中没有任何元素?例如,如果您在其后添加另一个ParDo将分组的KVs写入TextIO,它是否会以空输出结束?它是一个流式管道(我们从pubsub读取),使用DataflowPipelineRunner。还没有试过直接跑步者。我尝试在GroupByKey之后的ParDo中输出调试信息,但没有输出任何内容。我正在使用LOG.info(…)(我知道它是有效的)进行调试。虽然GroupByKey中没有添加任何元素,但它有时会在Google云中的GroupByKey框中显示“1个元素/s”。我现在发现GroupByKey实际上是有效的,只是速度非常慢。我不得不等待几分钟,日志输出才会出现。GroupByKeys应该花那么长时间,还是更可能是我做了傻事。目前,我们并没有给Dataflow提供太多的数据。我似乎已经通过添加triggering.Dataflow对PubSub水印的估计解决了延迟问题。PubSub本身不提供水印功能,所以Dataflow在内部计算一个估计值。Dataflow对PubSub水印的估计值。PubSub本身不提供水印功能,因此数据流在内部计算估计值。