backpressure
启用和
spark.streaming.kafka.maxRatePerPartition
set),将数据流映射到一个数据集,并将此数据集写入Parquet文件(内部
DStream.foreachRDD
)在每批货的最后。
一开始,一切似乎都很好,Spark流处理时间约为10秒,批处理间隔为30秒。生成的Kafka消息的数量比我们在Spark应用程序中消耗的消息量要少一些,因此不需要背压(在开始的时候)。Spark作业在我们的Spark Warehouse HDFS目录中创建了许多拼花文件(x Partitions=>x Parquet files per Batch),正如预期的那样。
每件事都能正常运行数小时,但大约12-14小时后,我们的处理时间迅速增加,例如,从一个批次到下一个批次,我们的处理时间从正常的10秒跳到了1分钟以上。这当然会在短时间内导致一个巨大的批处理队列。
我们在5分钟的批次中看到了类似的结果(这里的处理时间约为1.5分钟,在一段时间后,每批处理时间突然增加到10分钟以上)。
由于批处理可以独立运行,所以我们没有使用Spark Streaming的检查点特性。
我们使用的是Hortonworks数据平台3.1.4和Spark 2.3.2和Kafka 2.0.0。
这是火花流的已知问题吗?旧的拼花桌上有“奥克牌”吗?或者这是一个基于文件的问题还是基于Hadoop的问题?谢谢你的帮助。