TL; DR 关于查找Apache Spark数据管道可以处理的最大传入数据率的最佳做法是什么?
我为流数据编写了两个Apache Spark管道(一个使用Structured Streaming,另一个使用Streaming)。管道从套接字连接接收流数据。出于本地测试目的,我以两种方式将文件传输到ncat服务器:
这两种流方法(一种快速,一种稍慢)对于流式和流式传输流水线具有非常不同的结果。延迟的逐行流(1)允许流水线完全处理所有信息,而转储(2)导致仅处理一小部分数据点(大部分数据完全丢失)。
这似乎表明两条管道都存在问题,并且会跟上这些问题。使用完整文件转储(2)的速率,并且管道的结果与传入数据的速率有关。我显然希望尽可能接近这个最大速率,而不是过去。
我的问题是:如何找到Apache Structured Streaming / Apache Streaming管道设置的最大数据处理速率?
答案 0 :(得分:1)
在阅读和理解您的问题时,您希望找到火花流工作处理的速率。您有一个名为PIDRateEstimator
的东西,当使用BackPressure
启用时,它会为您的Spark应用程序提供反馈循环。在旧的火花流版本中,设置背压更有意义,您需要接收器使用流中的消息。从Spark 1.3开始,您可以使用无接收器的“直接”方法来确保更强大的端到端保证。所以你不需要担心背压,因为火花可以完成大部分微调。请从以下链接中了解有关PIDEstimators
的更多信息
https://vanwilgenburg.wordpress.com/2015/10/06/spark-streaming-backpressure/
对于速率限制,您可以使用Spark配置变量spark.streaming.kafka.maxRatePerPartition
来设置每个分区每个分区的最大消息数。