当使用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