Google cloud platform 数据流中的droppedDueToLateness和DroppedDueToClosedWidow

Google cloud platform 数据流中的droppedDueToLateness和DroppedDueToClosedWidow,google-cloud-platform,google-cloud-dataflow,apache-beam,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,到目前为止,我已经玩了很长一段时间了,我正在努力寻找ApacheBeam中窗口对象的最佳位置 Window.into(FixedWindows.of(Duration.standardMinutes(15))) .triggering(AfterWatermark .pastEndOfWindow()) .withAllowedLateness(Duration.ZERO) .discardi

到目前为止,我已经玩了很长一段时间了,我正在努力寻找ApacheBeam中窗口对象的最佳位置

Window.into(FixedWindows.of(Duration.standardMinutes(15)))
            .triggering(AfterWatermark
                .pastEndOfWindow())
            .withAllowedLateness(Duration.ZERO)
            .discardingFiredPanes()
我最初对每15分钟触发一次的窗口对象的想法是前一个。然而,这种方法给了我
droppedDueToLateness
。为了解决这个问题,我想“好吧,让我们增加允许的迟到次数吧!”

使用AllowedLateness(Duration.standardMinutes(60))修改了以下行
。以便延迟事件仍然可以在窗口中显示

然而,在进行此更改之后,删除的事件
droppedDueToClosedWindow
又回来了,这正是我在最初的实现中试图避免的!(未包含在本问题中,但与本问题无关)

消息来自PubSub队列,带有来自消息负载本身的时间戳事件(JSON对象中的属性,而不是来自PubSub的时间戳)


你知道为什么会发生这种情况吗?我应该仅仅增加资源还是仍然稍微调整我的窗口对象?

您可以在从
PubSubIO
读取数据的地方共享代码吗?你用过这个方法吗?

我因为关机而掉了很多东西,把我的窗口切换得非常简单

Window.into(FixedWindows.of(windowDuration)))
然后他们就走了

查看它们使用两种方式之一的窗口。上面列出的非常简单的方法。在DLPTextToBigQueryStreaming中,它们执行以下操作,看起来就像您正在执行的操作。第一种方法更成功

                Window.<KV<String, ReadableFile>>into(FixedWindows.of(WINDOW_INTERVAL))
                .triggering(
                    AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.ZERO))
                .discardingFiredPanes()
                .withAllowedLateness(Duration.ZERO))
Window.into(固定窗口(窗口间隔))
.触发(
AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.ZERO))
.丢弃Firedpanes()
.允许延迟(持续时间为零)

我不能使用它,因为事件是字节编码的,因此我需要对它们进行反序列化,但它仍然是一个JSON。我用来推断这些时间戳(在解码JSON并检索字段信息时)的是
WithTimestamps.of(new SetTimestampFn())。withAllowedTimestampSkew(new Duration(Long.MAX_VALUE)))