Spark 结构化流中的周期性处理时间峰值

问题描述 投票:0回答:1

我想知道为什么我的 Spark 流应用程序的每第四批都有一个巨大的峰值。

一些细节

  1. 这是使用rocksdb状态存储的安全处理
  2. 从 Kafka 读取 180 个分区
  3. 写入 12 个分区的 Kafka
  4. 设置300个随机分区
  5. 将 Spark 3.3.3 与 Python 一起使用

我尝试过调整簇大小,但这似乎没有帮助。但没有尝试任何有条理的事情。

apache-spark pyspark spark-streaming spark-structured-streaming spark-streaming-kafka
1个回答
0
投票

假设您使用默认触发器和触发器的最大偏移量(即

trigger
= 未指定(默认)
maxOffsetsPerTrigger
= )。

您的统计数据显示,峰值不是由资源不足或数据量峰值引起的,因为处理速率没有饱和,输入行和批次持续时间都没有线性增长,输入速率稳定。

由于你的峰值主要是由

addBatch
操作引起的,如果你没有任何特殊数据并在每第4批中触发特殊转换,而且每次写入都是相同的,我怀疑这是由元数据管理引起的。例如,流媒体元数据日志的压缩非常巨大并且需要时间来读取(这个问题已修复)。

您可以检查您的 RocksDB 是否有元数据设置,也可以检查 SQL 查询历史记录,看看读取或写入部分是否触发了长元数据操作。

© www.soinside.com 2019 - 2024. All rights reserved.