Spark Streaming RDD 是否总是按顺序处理?

Are Spark Streaming RDDs always processed in order?

我正在编写一个使用 RabbitMQ 来使用事件的 Spark Streaming 应用程序。我打算利用的 RabbitMQ 的一个特性是批量确认消息,即不需要一个接一个地确认,而只确认一批中的最后一个事件,这将确认整个批次。

在我承诺这样做之前,我想知道 Spark Streaming 是否总是按照它们到达的相同顺序处理 RDD,即如果 RDD1 在 RDD2 之前到达,RDD2 是否永远不会 scheduled/processed 在 RDD1 完成之前?

这对 ack 逻辑至关重要,因为如果 RDD2 可以在 RDD1 仍在处理的同时被处理,那么如果我确认 RDD2 中的最后一个事件也会确认 RDD1 中的所有事件,即使它们可能尚未完全处理。

默认情况下,只有在与批次X相关的所有重试等完成后,才会启动批次X+1。 ref

附加信息:在默认配置中是这样。你可以 查找对名为的未记录的隐藏配置的引用 spark.streaming.concurrentJobs 在邮件列表的其他地方。环境 超过 1 以获得更多并发性(在输出操作之间)中断 上述保证。 ref