在我的spark应用程序中,我正在阅读kafka主题。这个主题有10个分区,所以我创建了10个接收器,每个接收器有一个线程。通过这种配置,我可以观察到接收器的奇怪行为。 这些消费者的中位数是:
Receiver-0 node-1 10K
Receiver-1 node-2 2.5K
Receiver-2 node-3 2.5K
Receiver-3 node-4 2.5K
Receiver-4 node-5 2.5K
Receiver-5 node-1 10K
Receiver-6 node-2 2.6K
Receiver-7 node-3 2.5K
Receiver-8 node-4 2.5K
Receiver-9 node-5 2.5K
问题1:node-1正在接收与其他4个一样多的消息。
问题2:应用程序未达到批次性能限制(30秒批次的计算中位时间为17秒)。我希望它能够消耗足够的消息,使其至少达到25秒的计算时间。
我应该在哪里寻找瓶颈?
要清楚,需要消费更多消息。
@Edit:我只有两个分区滞后,所以第一个问题就解决了。不过,每秒读取10k msgs并不是很多。
答案 0 :(得分:1)
使用背压内置的Sparks(因为Spark 1.5,在您的问题时无法使用):https://github.com/jaceklaskowski/mastering-apache-spark-book/blob/master/spark-streaming-backpressure.adoc
只需设置
spark.streaming.backpressure.enabled=true
spark.streaming.kafka.maxRatePerPartition=X (really high in your case)
要找到瓶颈,您应该使用Sparkstreaming的WebUI,并在大部分时间内查看流程的DAG ...