来自Kafka的Spark流一个任务落后导致整个批次的速度减慢

rnmwe5a2  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(385)

我有一个spark流应用程序,通过网络读取Kafka的数据。需要注意的是,集群和kafka服务器位于不同的地理位置。
完成一项工作的平均时间约为8-10分钟(我每隔10分钟运行一次)。然而在某些批次中,作业完成时间突然上升。它的上升量通常是随机的(可能是20分钟、50分钟或一小时)。经过挖掘,我发现所有的任务都按时完成,除了一个任务,因为它影响了整个周转时间。例如,下面是一个这样的示例的任务时间日志:

在这种情况下,任务6花费了54分钟,而其他任务完成得非常快,即使输入分割是相同的。我认为这与网络问题有关(速度慢/阻塞),我认为重新启动此任务可以节省大量时间。
spark是否允许一些控制,通过这些控制,我们可以在不同的节点上重新启动缓慢的任务,然后将结果用于首先完成的任务?还是有一个更好的解决这个问题的办法,我不知道?

pgvzfuti

pgvzfuti1#

我一定要看看 spark.speculation.* 配置参数,并将其设置为更具攻击性,例如在您的情况下,这些参数将非常合适,我认为:
spark.speculation = true spark.speculation.interval = 1min (spark多久检查一次要推测的任务。) spark.speculation.multiplier = 1.1 (一项任务的速度要比用于推测的中位数慢多少倍。) spark.speculation.quantile = 0.5 (在为特定阶段启用推测之前必须完成的任务的百分比。)
您可以在这里找到配置参数的完整列表。

相关问题