Apache spark Spark Streaming:应用程序健康

Apache spark Spark Streaming:应用程序健康,apache-spark,garbage-collection,performance-testing,spark-streaming,Apache Spark,Garbage Collection,Performance Testing,Spark Streaming,我有一个基于Kafka的Spark Streaming应用程序,每5分钟运行一次。从运行5天后的统计数据来看,有一些观察结果: 处理时间从30秒逐渐增加到50秒。快照如下所示,突出显示了处理时间图表: 大量垃圾收集日志出现,如下所示: 问题: 有没有一个很好的解释来解释为什么处理时间大大增加了,即使事件的数量或多或少相同(在最后一个低谷期间) 在每个处理周期结束时,我得到了将近70个GC日志。这是正常的吗 确保处理时间保持在可接受的延迟内是否是更好的策略 这实际上取决于应用程序。调试此问题时

我有一个基于
Kafka
Spark Streaming
应用程序,每5分钟运行一次。从运行5天后的统计数据来看,有一些观察结果:

  • 处理时间从30秒逐渐增加到50秒。快照如下所示,突出显示了处理时间图表:
    

  • 大量垃圾收集日志出现,如下所示:

  • 问题

  • 有没有一个很好的解释来解释为什么
    处理时间大大增加了,即使事件的数量或多或少相同(在最后一个低谷期间)
  • 在每个处理周期结束时,我得到了将近70个
    GC日志。这是正常的吗
    
  • 确保
    处理时间
    保持在可接受的延迟内是否是更好的策略

  • 这实际上取决于应用程序。调试此问题时,我的方法如下:

  • 在“存储”选项卡下,查看存储的大小是否没有增长。如果出现增长,这可能表明某种缓存资源泄漏。检查
    spark.cleaner.ttl
    的值是多少,但最好确保在不再需要时取消缓存所有资源
  • 检查正在运行的作业的DAG可视化,并查看沿袭是否没有增长。如果是这种情况,请确保执行切割血统
  • 减少UI中保留的批次数(
    spark.streaming.UI.retainedBatches
    参数)
  • 即使事件的数量相同,请查看任务处理的数据量是否不随时间增长(阶段选项卡->输入列)。这可能指向应用程序级别的问题

  • 我有相对复杂的Spark流媒体应用程序(Spark v1.6、v2.1.1、v2.2.0)运行了几天,性能没有任何下降,因此一定存在一些可解决的问题。

    对我来说,罪魁祸首是:“减少UI中保留的批数(Spark.Streaming.UI.retainedBatches参数)”