Spark流直接方法中的语义恰好一次

问题描述 投票:0回答:1

Spark的官方文档说,基于Direct的方法涉及使用SimpleConsumer API,该API不使用Zookeeper存储偏移量,而是使用Spark的元数据检查点存储偏移量。该文档还说,基于直接的方法只能保证一次语义。

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

现在,对于在微批处理间隔后触发的每个微批处理,驱动程序会将偏移发送给每个任务,这些任务将检索对应的Kafka分区的数据。

问题

  1. 考虑到从Kafka检索到的指定偏移量的相应数据不会保留在Spark中,并且仅将偏移量存储在Spark中作为其元数据检查点的一部分,检查点的时间安排并不重要,因为它直接影响一次或至少/最多一次语义?触发微批处理并且Directstream从kafka检索数据后会立即发生吗,还是会在微批处理完成时发生?

  2. 此外,偏移量作为元数据检查点的一部分存储了什么?是否指定已处理的偏移量或尚未处理的偏移量?

apache-spark spark-streaming
1个回答
0
投票

[检查点是 [CheckpointsKafka itselfYour own data store]中的选项之一,检查点有几个缺点,除非您的交易是幂等的,否则不能保证一次准确。

文档警告您注意以下检查点:

因此,如果您希望使用完全相同的语义,则必须在幂等输出之后存储偏移量,或将偏移量存储在输出旁边的原子事务。

请参见官方文档的this部分,详细描述了这三个选项

© www.soinside.com 2019 - 2024. All rights reserved.