DStream批处理的Spark Streaming容错

时间:2016-10-31 23:58:30

标签: spark-streaming fault-tolerance data-loss dstream

假设在时间X收到一个流。假设我的批处理持续时间是1分钟。现在我的执行者正在处理第一批。但这次执行需要3分钟直到X + 3。但在X + 1和X + 2,我们收到其他两批。这是否意味着在X + 1我的第一批丢失了?或者它是否存储在我的记忆中并仍在处理中?

1 个答案:

答案 0 :(得分:1)

在Spark Streaming中处理期间不会丢失任何数据。 Spark会将所有传入的数据存储在内存中(并将它们复制到其他节点以实现容错)。在每个批处理间隔之后,执行程序安排一个新作业来处理存储的数据(微批处理)。当此作业正在运行时,另一个数据将存储在内存中以供将来处理。

无论如何你的例子是错的。如Spark documentation

中所述
  

要使群集上运行的Spark Streaming应用程序保持稳定,系统应该能够以接收数据的速度处理数据。换句话说,批量数据应该在生成时尽快处理。

用外行人的话来说,如果你在3分钟内处理1分钟的数据,你就不能指望它能长期发挥作用。过了一段时间,你的应用程序会爆炸,因为内存用于存储传入的数据。