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 使用Kafka的Spark streaming:从检查点恢复时,所有数据仅在一个微批中处理_Apache Spark_Spark Streaming_Checkpointing - Fatal编程技术网

Apache spark 使用Kafka的Spark streaming:从检查点恢复时,所有数据仅在一个微批中处理

Apache spark 使用Kafka的Spark streaming:从检查点恢复时,所有数据仅在一个微批中处理,apache-spark,spark-streaming,checkpointing,Apache Spark,Spark Streaming,Checkpointing,我正在运行一个Spark流媒体应用程序,从Kafka读取数据。 我已激活检查点以在出现故障时恢复作业 问题是如果应用程序失败,当它重新启动时,它会尝试在一个微批中执行故障点的所有数据。 这意味着,如果一个微批处理通常从Kafka接收10.000个事件,如果它失败并且在10分钟后重新启动,它将必须处理一个包含100.000个事件的微批处理 现在,如果我想让检查点恢复成功,我必须分配比平时多得多的内存 重新启动时,Spark Streaming试图一次执行检查点中所有过去的事件,这是正常的还是我做错

我正在运行一个Spark流媒体应用程序,从Kafka读取数据。 我已激活检查点以在出现故障时恢复作业

问题是如果应用程序失败,当它重新启动时,它会尝试在一个微批中执行故障点的所有数据。 这意味着,如果一个微批处理通常从Kafka接收10.000个事件,如果它失败并且在10分钟后重新启动,它将必须处理一个包含100.000个事件的微批处理

现在,如果我想让检查点恢复成功,我必须分配比平时多得多的内存

重新启动时,Spark Streaming试图一次执行检查点中所有过去的事件,这是正常的还是我做错了什么


非常感谢。

如果您的应用程序在从故障中恢复后发现很难在一个微批处理中处理所有事件,您可以在spark-defaults.conf或应用程序内部提供
spark.streaming.kafka.maxRatePerPartition
配置为spark conf

i、 e如果您认为您的系统/应用程序可以安全地处理每秒10K事件,并且您的kafka主题有2个分区,请将此行添加到spark-defaults.conf

spark.streaming.kafka.maxRatePerPartition 5000
或者将其添加到代码中:

val conf = new SparkConf()
conf.set("spark.streaming.kafka.maxRatePerPartition", "5000")
此外,我建议您将这个数字设置得更高一点,并启用背压。这将尝试以一定的速率传输数据,这不会破坏您的流媒体应用程序的稳定性

conf.set("spark.streaming.backpressure.enabled","true")

更新:出现错误,配置为每秒秒数,而不是每分钟秒数。

不幸的是,这对我不起作用。我已经启用了back pressure并设置了conf.set(“spark.streaming.kafka.maxRatePerPartition”,“50000”),我有两个kafka分区(所以它的速率应该是100.000),但当我在10分钟后重新启动作业时,它试图在一个微批中执行500.000多个事件。@nicola我在上面的帖子中犯了一个错误,您指定的配置是每秒,而不是每分钟。。。我说的5000是指每个分区每秒5000个事件。。。。。如果将其指定为50000,则要求的速率为每分钟50K*2*60=6M个事件。您是对的。现在它起作用了。谢谢设置“spark.streaming.kafka.maxRatePerPartition”成功了!