當使用Spark Streaming的Direct方式接受Kafka數據時, 若是kafka中的數據過多, 會致使spark數據積壓, 沒法準時完成做業, 甚至OOM。spa
共兩個運行指標:調度延遲與執行延遲。
調優的目標是在SparkStreaming設定的批次時間間隔內, spark可以完整處理完一個批次, 而不會出現沒法準時完成做業, 數據堆壓等問題。 code
PS: 要提高數據處理的吞吐量, 就提高kafka的分區數kafka
配置項spark.streaming.kafka.maxRatePerPartition
, 設置了每秒鐘從每一個分區中所得到的數據條數的最大值, 每一個批次處理的數據條數 = 批次時間 * 分區數 * Nit
在上一節中的配置項難以調控, 具體的值不易設置, 可使用back pressure機制來動態地調整從kafka得到的數據量。 back pressure機制會根據上一批次的運行狀況來動態調整獲取的數據量。
打開back pressure: 設置spark.streaming.backpressure.enabled
爲true
spark
在開啓背壓機制時, 程序運行的第一個批次沒有其餘批次的運行狀況做爲參考, 會獲取至關多的數據, 可能會致使OOM, 所以須要設置kafka的最大流量。 在二者均開啓的狀況下, 背壓機制劃定了數據量的下限, 另外一個劃定了上限, 能夠有效控制SparkStreaming所接受到的數據量。io