1

Apache Beam 或 Spark Streaming 中的流处理中的水印估计有多准确。我的数据源是来自 gcs/s3 的文件,但我使用与每个事件关联的事件时间作为窗口函数的时间戳。关于这些流处理引擎如何计算这种启发式或估计的任何想法,以及是否有办法衡量这个估计有多糟糕。

我的用例我有几个服务器在 gcs/S3 上生成事件日志,然后我从我的流处理引擎以流的方式读取这些文件。因此,由于文件系统中断和故障或服务器在几个小时内无法刷新日志事件,可能会出现延迟。因此,在我的流处理管道中,正确性是聚合某些事件时的重要方面之一。所以我很好奇这个水印估计是如何计算的

4

1 回答 1

2

一般来说,水印是由来源决定的。当源宣布 T 的水印时,它是在说“我不希望有更多的记录,事件时间早于 T”。然后流引擎可以继续关闭相关窗口等。仍然可能有一些事件的时间戳小于 T,这些事件将被视为“迟到”。在 Apache Beam 中,您也可以控制此类延迟事件。Apache Beam 中的源通过实现getWatermark() 接口来提供水印(那里的文档也很有帮助)。

在您的情况下,关键部分是了解这些文件的延迟时间。你提到了几个小时。一个简单的启发式方法可以将水印保留到'latest event time - 2 hours'. 根据延迟的预期分布,您可以将其限制为 10 分钟,以获得大部分好处并将进一步延迟的事件视为“迟到”。

于 2018-01-25T18:08:36.887 回答