有没有办法在 Apache Beam 中指定无限允许延迟?

Is there a way to specify infinite allowed lateness in Apache Beam?

我正在使用固定 windows 按事件时间批处理数据,以便有效地将其发送到外部 API(每批 60 秒),累积模式设置为 DISCARDING,因为它迟到的数据是否在没有先前数据的情况下发送到外部 API 并不重要。

是否可以指定一个无限的允许迟到时间,这样迟到的数据就永远不会被丢弃?

肯定是可以的,你可以把允许迟到设置的非常高Duration(比如Duration.standardDays(36500))。另一方面,这样做会导致您的状态无限增长,这可能不是您想要的。每个打开的 window(每个 window 曾经见过)将至少有一个称为 GC 计时器的计时器 - 一个为 window 结束 + 允许的延迟设置的计时器。每个计时器都必须保持状态,因此,状态的大小会随着时间的推移而增长。 如果你不需要基于事件时间的批处理,使用 GroupIntoBatches 可能是一个更好的选择,它应该不会遇到这个问题(你不需要设置允许的延迟,你的状态大小会不增长)。