我的公司同时接收基于批次和流的事件数据。我想在可预测的时间内使用Google Cloud数据流处理数据。但是,我意识到在某些情况下数据会延迟或出现故障。如何使用Dataflow处理延迟或故障?
这是一个家庭作业问题,想知道下面的唯一答案。
a。设置一个全局窗口以捕获所有数据
b。设置滑动窗口以捕获所有滞后数据
c。使用水印和时间戳捕获滞后数据
d。确保每种数据源类型(流或批处理)都有时间戳,并使用时间戳定义滞后数据的逻辑。我的推理-我相信答案是C。但是,水印实际上不同于最新数据。请确认。另外,由于该问题同时提到了基于批处理和基于流的问题,因此我也认为“ D”是否可以作为答案,因为“批处理”(或有界集合)模式没有时间戳,除非它来自源代码或通过编程设置。所以,我对答案有点困惑。
请在这里帮助。我的母语不是英语,所以不确定是否可以错过这个问题的线索。
答案 0 :(得分:1)
How to use Dataflow to handle late or out of order
这是一个大问题。我将尝试给出一些简单的解释,但提供一些可能有助于您理解的资源。
有限的数据收集
您已经了解了这一点:绑定数据不存在延迟问题。根据有界数据的性质,您可以在管道启动之前立即读取完整的数据集。
无限制数据收集
您的C正确,并且水印与最新数据不同。实现中的水印是单调增加的时间戳。当Beam / Dataflow看到具有比水印更早的事件时间戳记的记录时,该记录将被视为较晚的数据(这只是概念性的,您可能要检查[1]进行详细的讨论)。
这里有[2],[3],[4]作为本主题的参考:
答案 1 :(得分:0)
B和C可能是答案。
在滑动窗口中,您具有数据的顺序,因此,如果您在位置9接收数据而没有在位置8接收数据,则会知道数据8已延迟并等待它。问题是,如果最新数据被延迟,您将无法知道该数据是否被延迟而丢失了。 https://en.wikipedia.org/wiki/Sliding_window_protocol
水印,请等待一段时间以获取滞后的数据,如果这段时间过去并且数据仍未到达,则会丢失此数据。
因此,答案是C,因为B说“捕获所有 all 滞后数据”,而C忽略了all这个词