我们有一个Spark Streaming应用程序基本上没有几小时的调度延迟,但突然间它会跳到多分钟并且失控:这种情况发生在一段时间后即使我们加倍批处理间隔。
我们不确定导致延迟的原因(理论包括垃圾收集)。无论我们使用3个,5个还是10个从站,群集的CPU利用率通常都很低。
我们真的不愿意进一步增加批次间隔,因为这么长时间的延迟是零。是否有任何技术可以缩短调度延迟突然增加的恢复时间?我们已经尝试过看它是否会自行恢复,但如果它甚至恢复它需要几个小时。
答案 0 :(得分:0)
打开批处理链接,并确定哪些阶段处于延迟状态。是否存在影响此延迟的其他数据库/应用程序的外部访问?
进入每个作业,查看每个执行者处理的数据/记录。你可以在这里找到问题。
数据分区也可能存在偏差。如果应用程序正在从kafka读取数据并对其进行处理,那么如果未明确定义分区,则跨核心的数据可能存在偏差。调整参数:kafka分区数,RDD分区数,执行者数量,执行者核心数。