Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花流卡夫卡背压_Apache Spark_Apache Kafka_Streaming_Backpressure_Spark Streaming Kafka - Fatal编程技术网

Apache spark 火花流卡夫卡背压

Apache spark 火花流卡夫卡背压,apache-spark,apache-kafka,streaming,backpressure,spark-streaming-kafka,Apache Spark,Apache Kafka,Streaming,Backpressure,Spark Streaming Kafka,我们有一个Spark流应用程序,它从接收器中的Kafka队列读取数据,并进行一些转换并输出到HDFS。批处理间隔为1分钟,我们已经调整了背压和spark.streaming.receiver.maxRate参数,因此大部分时间工作正常 但我们还有一个问题。当HDFS完全关闭时,批处理作业将挂起很长一段时间(假设HDFS没有工作4小时,作业将挂起4小时),但接收器不知道作业没有完成,因此它仍在接收接下来4小时的数据。这会导致OOM异常,并且整个应用程序都已关闭,我们丢失了大量数据 因此,我的问题是

我们有一个Spark流应用程序,它从接收器中的Kafka队列读取数据,并进行一些转换并输出到HDFS。批处理间隔为1分钟,我们已经调整了背压和
spark.streaming.receiver.maxRate
参数,因此大部分时间工作正常

但我们还有一个问题。当HDFS完全关闭时,批处理作业将挂起很长一段时间(假设HDFS没有工作4小时,作业将挂起4小时),但接收器不知道作业没有完成,因此它仍在接收接下来4小时的数据。这会导致OOM异常,并且整个应用程序都已关闭,我们丢失了大量数据


因此,我的问题是:是否可以让接收者知道作业没有完成,这样它将接收较少(甚至没有)的数据,并且当作业完成时,它将开始接收更多的数据以赶上进度。在上述情况下,当HDFS关闭时,接收器将从Kafka读取较少的数据,并且在HDFS正常后,在接下来的4小时内生成的块非常小,接收器和整个应用程序未关闭,接收器将读取更多数据并开始捕捉。

您可以通过设置属性
spark.streaming.backpressure.enabled=true来启用背压。这将动态地修改批处理大小,并避免从队列构建中获得OOM的情况。它有几个参数:

  • 火花、流式处理、背压、pid、比例-对上一批大小错误的响应信号(默认值1.0)
  • 火花、流量、背压、pid、积分-累积误差响应信号-有效阻尼(默认值为0.2)
  • spark.streaming.backpressure.pid.derived-对错误趋势的响应(用于快速响应更改,默认值为0.0)
  • spark.streaming.backpressure.pid.minRate-批处理频率暗示的最小速率,更改它以减少高通量作业中的下冲(默认为100)
默认设置非常好,但我模拟了算法对各种参数的响应