Spark Streaming - 批次间隔与处理时间
Spark Streaming - Batch Interval vs Processing time
我们在 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
,它会起作用吗??因为我们不能丢失应用程序中的任何数据。
在直接流方法中,数据不是由接收器读取然后分派给其他工作器的。发生的事情是驱动程序从 Kafka 读取偏移量,然后向每个分区发送要读取的偏移量子集。
如果您的工作人员尚未处理完上一份工作,他们将不会开始处理下一份工作(除非您明确将 spark.streaming.concurrentJobs
设置为大于 1)。这意味着将读取偏移量,但实际上不会分派给负责读取数据的执行程序,因此不会有任何数据丢失。
这意味着您的工作将无限期延迟并导致大量处理延迟,这不是您想要的。根据经验,任何 Spark 作业的处理时间都应小于为该作业设置的时间间隔。
我们在 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
,它会起作用吗??因为我们不能丢失应用程序中的任何数据。
在直接流方法中,数据不是由接收器读取然后分派给其他工作器的。发生的事情是驱动程序从 Kafka 读取偏移量,然后向每个分区发送要读取的偏移量子集。
如果您的工作人员尚未处理完上一份工作,他们将不会开始处理下一份工作(除非您明确将 spark.streaming.concurrentJobs
设置为大于 1)。这意味着将读取偏移量,但实际上不会分派给负责读取数据的执行程序,因此不会有任何数据丢失。
这意味着您的工作将无限期延迟并导致大量处理延迟,这不是您想要的。根据经验,任何 Spark 作业的处理时间都应小于为该作业设置的时间间隔。