Spark从检查点重新启动流时发生的事情

cra*_*rak 6 out-of-memory apache-spark spark-streaming

在长时间不活动(3day)后重新启动火花时.

val ssc = StreamingContext.getOrCreate(checkpointDir, newStreamingContext _, createOnError = createOnError)
Run Code Online (Sandbox Code Playgroud)

我看到重启是痛苦的.

标签流需要45分钟才能显示,这意味着"火花已经完成了检查点的加载".(从检查点文件加载最后一批很长时间)

之后,它显示1000个批次,0事件.当我在几分钟后重新启动时,它只显示错过的批次(当停机时间约为5分钟时,10批30秒)并且"快速"加载.

所以这让我觉得加载我的检查点需要时间,因为它加载了这1000个批次.

因为1000个30s的30s不匹配3天,我想知道当这1000个批次完成时会发生什么,它会在当前时间重新启动还是加载其他错过的批次?这1000个限制是否可配置?

编辑:在这1000个批次之后没有任何反应,直接kafka没有创建新的批次.我认为这不是预期的功能,我不愿意制作关于此的火花jira票.


因为问题不是单独出现的,我认为这1000个批次都装在驱动程序内存中.

有些批次后有时会有OOM.当它没有时,我看到我的总延迟提高,而平均处理时间低于批处理时间.这让我觉得我的驱动程序几乎是OOM,并且难以向执行程序发送批处理.

当然,当我的流不是从检查点创建的时候,每件事都运作良好.那么?当流从检查点开始时会发生什么?


ps:0事件批处理包含事件,因为它们花费的时间与我通常的完整批次一样多,而且我看到kafka偏移量增加,所以我认为是一个显示错误的火花UI.