Google cloud dataflow 使用outputWithTimestamp时,数据流管道正在处理过程中丢弃事件

Google cloud dataflow 使用outputWithTimestamp时,数据流管道正在处理过程中丢弃事件,google-cloud-dataflow,Google Cloud Dataflow,我有一个云数据流管道,我在其中更改事件的原始时间戳,以模拟事件延迟到达的真实场景。然而,在管道的每次运行中,我似乎都会减少一定比例的事件。在DoFn中,我使用以下代码更改时间戳: Instant newTimestamp = originalTimestamp.minus(Duration.standardMinutes(RANDOM.nextInt(15))); c.outputWithTimestamp(KV.of(Integer.toString(RANDOM.nextInt(100)),

我有一个云数据流管道,我在其中更改事件的原始时间戳,以模拟事件延迟到达的真实场景。然而,在管道的每次运行中,我似乎都会减少一定比例的事件。在DoFn中,我使用以下代码更改时间戳:

Instant newTimestamp = originalTimestamp.minus(Duration.standardMinutes(RANDOM.nextInt(15)));
c.outputWithTimestamp(KV.of(Integer.toString(RANDOM.nextInt(100)), element), newTimestamp);

问题很可能是由于DoFn步骤输出的时间戳早于处理步骤接收到的时间戳减去允许的时间戳偏移。将引发的异常可以在以下代码中找到:

此处记录了有关使用outputWithTimestamp的此行为:

虽然您可以重写GetAllowedTimestampsSkew函数,但也有文档记录,这可能会导致水印计算出现不可预测的问题,因此只能在没有窗口/分组的情况下使用它


问题最有可能是由于DoFn步骤输出的时间戳早于处理步骤接收到的时间戳减去允许的时间戳偏移。将引发的异常可以在以下代码中找到:

此处记录了有关使用outputWithTimestamp的此行为:

虽然您可以重写GetAllowedTimestampsSkew函数,但也有文档记录,这可能会导致水印计算出现不可预测的问题,因此只能在没有窗口/分组的情况下使用它