Spark Streaming - 批处理间隔与处理时间

时间:2017-02-07 14:03:05

标签: scala apache-kafka spark-streaming kafka-consumer-api

我们在YARN群集上运行Spark Streaming application

它接收来自Kafka topics的消息。

实际上我们的处理时间超过了批处理间隔。

Batch Interval : 1 Minute
Processing Time : 5 Minutes

我想知道,如果在处理时间之间收到一些数据会发生什么,数据是否会在内存中可用,直到处理结束。或者它将在后续数据提取中被覆盖?

我们正在使用Direct Streaming approach从Kafka主题中获取数据。

我应该使用Window based操作吗?例如,如果我有Window length as 5 Minutes and Sliding interval as 2 Minutes and Batch Interval as 1 Minute,它会工作吗?因为我们不能在我们的应用程序中丢失任何数据。

1 个答案:

答案 0 :(得分:5)

在直接流式传输方法中,接收方不会读取数据,然后将数据发送给其他工作人员。发生的事情是驱动程序从Kafka读取偏移量,然后向每个分区发送要读取的偏移量的子集。

如果您的工作人员尚未完成上一个工作的处理,他们将无法开始处理下一个工作(除非您明确将spark.streaming.concurrentJobs设置为大于1)。这意味着将读取偏移量,但实际上不会发送给负责读取数据的执行者,因此不会丢失任何数据。

这意味着你的工作将无限延迟并导致大量处理延迟,这不是你想要的。根据经验,任何Spark作业处理时间应小于为该作业设置的间隔。