假设如果在时间 X 接收到流。假设我的批处理持续时间是 1 分钟。现在我的执行者正在处理第一批。但是这个执行需要 3 分钟直到 X+3。但是在 X+1 和 X+2 我们收到另外两批。这是否意味着在 X+1 我的第一批丢失了?还是它存储在我的记忆中并且仍在处理中?
问问题
78 次
1 回答
1
Spark Streaming 在处理过程中不会丢失任何数据。Spark 会将所有传入的数据存储在内存中(并将它们复制到其他节点以进行容错)。在每个批处理间隔之后,执行器会安排一个新作业来处理存储的数据(微批处理)。在此作业运行时,另一个数据正在存储在内存中以供将来处理。
无论如何,你的例子是错误的。如Spark 文档中所述
为了使在集群上运行的 Spark Streaming 应用程序稳定,系统应该能够在接收到数据时尽快处理数据。换言之,成批数据的处理速度应与生成数据的速度一样快。
用外行的话来说,如果你在 3 分钟内处理 1 分钟的数据切片,你不能指望它会长期有效。一段时间后,由于存储传入数据的内存占用,您的应用程序无论如何都会崩溃。
于 2016-11-02T20:33:40.207 回答