DStream 批处理上的 Spark Streaming 容错
Spark Streaming fault tolerance on DStream batches
假设如果在时间 X 接收到一个流。假设我的批持续时间是 1 分钟。现在我的执行者正在处理第一批。但是这个执行需要 3 分钟直到 X+3。但是在 X+1 和 X+2 我们收到另外两批。这是否意味着在 X+1 时我的第一批丢失了?还是存储在我的记忆中仍在处理中?
Spark Streaming 处理过程中不会丢失任何数据。 Spark 会将所有传入的数据存储在内存中(并将它们复制到其他节点以实现容错)。在每个 批处理间隔 之后,执行程序会安排一个新作业来处理存储的数据(微批处理)。虽然此作业是 运行,但另一个数据正在存储在内存中以供将来处理。
无论如何你的例子是错误的。如Spark documentation
所述
For a Spark Streaming application running on a cluster to be stable, the system should be able to process data as fast as it is being received. In other words, batches of data should be processed as fast as they are being generated.
通俗地说,如果您在 3 分钟内处理 1 分钟的数据切片,那么您不能指望它会长期有效。一段时间后,由于存储传入数据的内存使用量,您的应用程序无论如何都会崩溃。
假设如果在时间 X 接收到一个流。假设我的批持续时间是 1 分钟。现在我的执行者正在处理第一批。但是这个执行需要 3 分钟直到 X+3。但是在 X+1 和 X+2 我们收到另外两批。这是否意味着在 X+1 时我的第一批丢失了?还是存储在我的记忆中仍在处理中?
Spark Streaming 处理过程中不会丢失任何数据。 Spark 会将所有传入的数据存储在内存中(并将它们复制到其他节点以实现容错)。在每个 批处理间隔 之后,执行程序会安排一个新作业来处理存储的数据(微批处理)。虽然此作业是 运行,但另一个数据正在存储在内存中以供将来处理。
无论如何你的例子是错误的。如Spark documentation
所述For a Spark Streaming application running on a cluster to be stable, the system should be able to process data as fast as it is being received. In other words, batches of data should be processed as fast as they are being generated.
通俗地说,如果您在 3 分钟内处理 1 分钟的数据切片,那么您不能指望它会长期有效。一段时间后,由于存储传入数据的内存使用量,您的应用程序无论如何都会崩溃。