流处理水印启发式

时间:2018-01-24 23:31:30

标签: spark-streaming google-cloud-dataflow apache-beam spark-structured-streaming stream-processing

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

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

1 个答案:

答案 0 :(得分:1)

一般来说,水印是由来源决定的。当一个消息来源宣布T的水印时,它会说"我不希望更多的记录事件发生时间早于T"。然后,流引擎可以继续关闭相关的窗口等。可能仍然存在一些时间戳小于T的事件,并且这些事件将被视为"迟到"。在Apache Beam中,您也可以控制此类延迟事件。 Apache Beam中的源代码通过实现getWatermark() interface提供水印(文档也非常有用)。

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