8

我正在分析 Spark Structured Streaming 的背压特性。有谁知道细节?是否可以通过代码调整进程传入记录?谢谢

4

2 回答 2

13

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

通常,Structured Streaming 默认会尝试尽可能快地处理数据。每个源中都有允许控制处理速率的选项,例如maxFilesPerTrigger在文件源和maxOffsetsPerTriggerKafka 源中。阅读以下链接了解更多详情:

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

于 2017-07-12T22:16:57.833 回答
2

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

maxOffsetsPerTrigger可以更改每个 spark 批处理集处理的记录数,backpressure.enabled更改接收率,但这与您去告诉源减速的背压不同。

于 2019-07-14T14:03:42.657 回答