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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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 Spark流直接方法中的精确一次语义_Apache Spark_Spark Streaming - Fatal编程技术网

Apache spark Spark流直接方法中的精确一次语义

Apache spark Spark流直接方法中的精确一次语义,apache-spark,spark-streaming,Apache Spark,Spark Streaming,Spark的官方文档称,基于直接的方法包括使用SimpleConsumer API,该API不使用Zookeeper来存储偏移量,而是使用Spark的元数据检查点来存储偏移量。文档还说,基于直接的方法保证了语义的精确性 当我们使用ssc.checkpoint(“目录”)启用Spark的元数据检查点时,我们从不指定间隔 现在,对于在微批次间隔之后触发的每个微批次,驱动程序向每个任务发送偏移量,这些任务检索相应Kafka分区的数据 问题: 考虑到针对指定偏移量从Kafka检索到的相应数据没有持久化在

Spark的官方文档称,基于直接的方法包括使用SimpleConsumer API,该API不使用Zookeeper来存储偏移量,而是使用Spark的元数据检查点来存储偏移量。文档还说,基于直接的方法保证了语义的精确性

当我们使用ssc.checkpoint(“目录”)启用Spark的元数据检查点时,我们从不指定间隔

现在,对于在微批次间隔之后触发的每个微批次,驱动程序向每个任务发送偏移量,这些任务检索相应Kafka分区的数据

问题

  • 考虑到针对指定偏移量从Kafka检索到的相应数据没有持久化在Spark中,并且只有偏移量作为元数据检查点的一部分存储在Spark中,检查点的时间是否重要,因为它直接影响一次或至少/最多一次语义?它是在微批次被触发并且directstream从kafka检索数据时发生的,还是在微批次完成时发生的

  • 此外,作为元数据检查点的一部分存储的偏移量意味着什么?它是指定已处理的偏移量还是尚未处理的偏移量


  • 检查点是三个选项中的一个,检查点有几个缺点,除非事务是幂等的,否则不能保证只执行一次

    文档警告您有关检查点,如下所示:

    因此,如果您想要完全等同于一次语义,您必须 将偏移存储在幂等输出之后,或将偏移存储在 与输出并行的原子事务


    请参见官方文件中详细描述这三个选项的章节

    。我也是这么想的。我的意思是,仅启用检查点的直接方法在一次语义上无法起到帮助作用,因为这涉及到以原子方式保存处理过的数据和偏移量。由于spark中的元数据检查点和使用.saveas***保存处理后的数据是两个离散的步骤,因此它不能保证只执行一次语义。现在,当您说启用检查点时处理幂等性(忽略检查点的其他问题)可以保证只使用一次语义,你是说元数据检查点只有在微博客完成后才会发生吗?我这么说是因为作为开发人员的责任,幂等性至少来自一次语义,这意味着元数据检查点发生在“之后”每次微批次执行时,如果驱动程序在微批次执行完成后立即停机,但在元数据检查点完成之前,这意味着重新启动驱动程序将意味着重新执行特定偏移量,因为该偏移量上次未保存在元数据检查点中。我的理解正确吗?@SheelPancholi,您可以使用参数-“根据检查点运算符的“渴望”标志,检查点可以是“渴望”或“懒惰”。急切检查点是默认检查点,在请求时立即发生。惰性检查点不会也只会在执行操作时发生”-