Spark Streaming:应用程序健康状态

5

我有一个基于 KafkaSpark Streaming 应用程序,每 5 分钟运行一次。在运行了 5 天后查看统计数据,发现以下几点观察结果:

  1. 处理时间逐渐从 30 秒增加到 50 秒。下面的快照图表突出了处理时间变化情况: Snapshot

  2. 出现了大量的 Garbage Collection 日志,如下所示: Snapshot

问题:

  1. 为什么即使事件数量大致相同(在最后一个周期期间),处理时间 显著增加,是否有合理的解释?
  2. 我在每个处理周期结束时收到近70个GC日志,这正常吗?
  3. 有没有更好的策略来确保处理时间保持在可接受的延迟范围内?
1个回答

2
这真的取决于应用程序。我在调试此问题时的方法如下:
  1. 在存储选项卡下查看存储大小是否不断增长。如果有增长,这可能表明存在某种缓存资源泄漏。检查 spark.cleaner.ttl 的值,但最好确保在不再需要资源时取消缓存所有资源。
  2. 检查正在运行的作业的DAG可视化,并查看谱系是否不断增长。如果是这种情况,请确保执行检查点以削减谱系。
  3. 减少UI中保留的批次数量(spark.streaming.ui.retainedBatches参数)。
  4. 即使事件数相同,请查看任务处理的数据量是否随时间增长(Stages标签 -> 输入列)。这可能指向应用程序级别的问题。
我有相对复杂的Spark Streaming应用程序(Spark v1.6、v2.1.1、v2.2.0)在运行多天而没有性能下降,所以一定有一些可解决的问题。

1
对我来说罪魁祸首是:“减少UI中保留的批次数量(spark.streaming.ui.retainedBatches参数)”。 - Mohitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接