火花流是否必须完成处理前一批数据,然后它才能处理下一批数据,是不是?

时间:2016-07-02 01:31:30

标签: apache-spark spark-streaming

我设置的火花流时间间隔是5s。如果当前的5s收到非常多的数据,并且火花流不能在5s内完成,但下一批数据即将到来。

火花流是否会在同一时间处理下一批数据?

我的意思是批次会并行执行吗?

2 个答案:

答案 0 :(得分:5)

Spark流一次处理一批。此外,每批中的各个数据项按批次中的顺序进行处理。默认情况下,如果spark没有足够的时间来批量处理下一个数据项,那么这些数据项将被删除。

但是,如果您使用更高级的流连接(例如Kafka),那么一旦完成当前,spark就可以处理待处理的批处理。这会导致批量在Kafka中建立,这种构建被称为"背压",它也可以构建到Kafka必须开始丢弃数据的程度。

如果您没有使用Kafka等高级连接,并且您的数据流是" bursty",这意味着存在高输入率的时段,您可能需要增加批处理时间以最小化数据损失。

答案 1 :(得分:2)

Spark stream是一个时间流程管道。先到先得。因此它不会一起处理相邻的批次,因为它以最佳方式处理每个批次,包括分发工作。更好的情况是,它将在完成当前处理挂起的批处理。这称为背压,可以使用某些接收器,如Kafka。如果不是,它将简单地丢失这些数据。