来自Kafka的Spark流量任务落后,导致整批货物减速

时间:2016-06-22 05:35:40

标签: apache-spark apache-kafka spark-streaming

我有一个火花流应用程序,通过网络从Kafka读取数据。值得注意的是,群集和Kafka服务器位于不同的地理位置。

完成工作的平均时间约为8-10分钟(我每隔10分钟运行一次)。然而,在某些批次中,工作完成时间会增加。它的射击量一般是随机的(可能是20分钟或50分钟或一小时)。在挖掘时,我发现所有任务都按时完成,除了一个因为整个周转时间受到影响。例如,这是来自一个这样的实例的任务时间日志:

Tasks

在这种情况下,即使输入分割相同,任务6也需要54分钟,而其他任务已经很快完成。我已将此问题解释为网络问题(缓慢/阻塞),并且我认为重新启动此任务可以节省大量时间。

spark是否允许一些控制,通过它我们可以在另一个节点上重新启动慢速任务,然后将结果用于首先完成的任务?或者是否存在我不知道的这个问题的更好的解决方案?

1 个答案:

答案 0 :(得分:1)

我肯定会看一下spark.speculation.*配置参数,并将它们设置为更具攻击性,例如在您的情况下,我认为这些参数非常合适:

  • spark.speculation = true
  • spark.speculation.interval = 1min(Spark会检查要推测的任务的频率。)
  • spark.speculation.multiplier = 1.1(任务的速度比推测考虑的中位数慢多少。)
  • spark.speculation.quantile = 0.5(在为特定阶段启用推测之前必须完成的任务百分比。)

您可以找到配置参数的完整列表here