我试图了解Spark Streaming输出的不同指标意味着什么,我稍微混淆了最后一批处理时间,总延迟和处理延迟之间的差异?
我已经看过Spark Streaming指南,它提到处理时间是一个关键指标,用于确定系统是否落后,但其他地方,如“Pro Spark Streaming:使用Apache Spark的实时分析的禅”谈论使用总延迟和处理延迟。我没有找到任何列出Spark Streaming生成的所有指标的文档,并解释了每个指标的含义。
如果有人可以概述这三个指标的含义或者指出任何可以帮助我理解这些指标的资源,我将不胜感激。
让我们分解每个指标。为此,我们定义一个基本流应用程序,它从一些任意来源以给定的4秒间隔读取批处理,并计算经典字数:
inputDStream.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
.saveAsTextFile("hdfs://...")
flatMap
开始,到saveAsTextFile
结束,并假定作业已被提交的先决条件。8 - 4 = 4
秒落后,从而使调度延迟4秒。Scheduling Delay + Processing Time
。按照相同的例子,如果我们落后4秒,意味着我们的调度延迟是4秒,而下一批又花了8秒来计算,这意味着总延迟现在是8 + 4 = 12
秒长。来自正在使用的Streaming应用程序的实例:
我们看到:
11 - 4 = 7
秒。7 + 1 = 8
。如果您的窗口是1分钟,平均处理时间是1分7秒,则会出现问题:每个批次将延迟下一个7秒钟。
您的处理时间图表显示稳定的处理时间,但始终高于批处理时间。
我想在经过一段时间之后,你的驱动程序会因超出GC开销限制而崩溃,因为它将满载等待批准的挂起批处理。
您可以通过减少处理时间以使其低于预期的微量接头最大持续时间(需要代码和/或资源分配更改),或增加微量接收器大小,或转到连续流式传输来更改此值。
RGDS