数据流可处理批处理和流消息的最新数据和无序数据?

时间:2019-01-11 06:23:30

标签: google-cloud-dataflow apache-beam dataflow

我的公司同时接收基于批次和流的事件数据。我想在可预测的时间内使用Google Cloud数据流处理数据。但是,我意识到在某些情况下数据会延迟或出现故障。如何使用Dataflow处理延迟或故障?

这是一个家庭作业问题,想知道下面的唯一答案。

a。设置一个全局窗口以捕获所有数据

b。设置滑动窗口以捕获所有滞后数据

c。使用水印和时间戳捕获滞后数据

d。确保每种数据源类型(流或批处理)都有时间戳,并使用时间戳定义滞后数据的逻辑。

我的推理-我相信答案是C。但是,水印实际上不同于最新数据。请确认。另外,由于该问题同时提到了基于批处理和基于流的问题,因此我也认为“ D”是否可以作为答案,因为“批处理”(或有界集合)模式没有时间戳,除非它来自源代码或通过编程设置。所以,我对答案有点困惑。

请在这里帮助。我的母语不是英语,所以不确定是否可以错过这个问题的线索。

2 个答案:

答案 0 :(得分:1)

How to use Dataflow to handle late or out of order

这是一个大问题。我将尝试给出一些简单的解释,但提供一些可能有助于您理解的资源。

有限的数据收集

您已经了解了这一点:绑定数据不存在延迟问题。根据有界数据的性质,您可以在管道启动之前立即读取完整的数据集。

无限制数据收集

您的C正确,并且水印与最新数据不同。实现中的水印是单调增加的时间戳。当Beam / Dataflow看到具有比水印更早的事件时间戳记的记录时,该记录将被视为较晚的数据(这只是概念性的,您可能要检查[1]进行详细的讨论)。

这里有[2],[3],[4]作为本主题的参考:

  1. https://docs.google.com/document/d/12r7frmxNickxB5tbpuEh_n35_IJeVZn1peOrBrhhP6Y/edit#heading=h.7a03n7d5mf6g

  2. https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102

  3. https://www.oreilly.com/library/view/streaming-systems/9781491983867/

  4. https://docs.google.com/presentation/d/1ln5KndBTiskEOGa1QmYSCq16YWO9Dtmj7ZwzjU7SsW4/edit#slide=id.g19b6635698_3_4

答案 1 :(得分:0)

B和C可能是答案。

在滑动窗口中,您具有数据的顺序,因此,如果您在位置9接收数据而没有在位置8接收数据,则会知道数据8已延迟并等待它。问题是,如果最新数据被延迟,您将无法知道该数据是否被延迟而丢失了。 https://en.wikipedia.org/wiki/Sliding_window_protocol

水印,请等待一段时间以获取滞后的数据,如果这段时间过去并且数据仍未到达,则会丢失此数据。

因此,答案是C,因为B说“捕获所有 all 滞后数据”,而C忽略了all这个词