有没有办法在 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 可能是一个更好的选择,它应该不会遇到这个问题(你不需要设置允许的延迟,你的状态大小会不增长)。
我正在使用固定 windows 按事件时间批处理数据,以便有效地将其发送到外部 API(每批 60 秒),累积模式设置为 DISCARDING,因为它迟到的数据是否在没有先前数据的情况下发送到外部 API 并不重要。
是否可以指定一个无限的允许迟到时间,这样迟到的数据就永远不会被丢弃?
肯定是可以的,你可以把允许迟到设置的非常高Duration
(比如Duration.standardDays(36500)
)。另一方面,这样做会导致您的状态无限增长,这可能不是您想要的。每个打开的 window(每个 window 曾经见过)将至少有一个称为 GC 计时器的计时器 - 一个为 window 结束 + 允许的延迟设置的计时器。每个计时器都必须保持状态,因此,状态的大小会随着时间的推移而增长。
如果你不需要基于事件时间的批处理,使用 GroupIntoBatches 可能是一个更好的选择,它应该不会遇到这个问题(你不需要设置允许的延迟,你的状态大小会不增长)。