Spark Structured Streaming 如何处理背压?

How Spark Structured Streaming handles backpressure?

我正在分析 Spark Structured Streaming 的背压功能。有谁知道详情?是否可以通过代码调整处理传入记录? 谢谢

如果您的意思是动态更改结构化流中每个内部批处理的大小,那么。 Structured Streaming 中没有基于接收器的源,因此完全没有必要。从另一个角度来看,Structured Streaming 不能做真正的背压,因为,比如,Spark 不能告诉其他应用放慢向 Kafka 推送数据的速度。

通常情况下,结构化流式处理会默认尝试尽可能快地处理数据。每个源中都有选项可以控制处理速率,例如 File 源中的 maxFilesPerTrigger 和 Kafka 源中的 maxOffsetsPerTrigger 。阅读以下链接了解更多详情:

http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#input-sources http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

仅需要处理背压是基于推送的机制。 Kafka消费者是基于拉取的,只有当当前批次处理和保存完成后,spark才会拉取下一批记录。如果在 spark 中延迟处理和保存,它不会提取新的一批记录,因此不需要背压处理。

maxOffsetsPerTrigger can change the number of records processed per spark batch set, backpressure.enabled 改变接收速率,但这与你告诉源放慢速度的背压不同。