当从Kafka源将Spark DStreams作为消费者进行流式传输时,可以检查点火花上下文,以便当应用程序崩溃(或受kill -9
影响)时,应用程序可以从上下文检查点恢复。但是,如果应用程序意外部署了错误的逻辑,则可能需要回放到最后一个主题+分区+偏移量来重放来自某个Kafka主题分区的事件'在“错误逻辑”之前工作正常的抵消头寸。流媒体应用程序如何重绕到最后一个好位置'检查点生效时(主题+分区+偏移)?
注意:在I(心脏)日志中,Jay Kreps撰写了关于使用并行消费者(群组)流程的信息,该流程从分散的Kafka偏移位置开始,直到赶上原始版本然后杀死原始版本。 (关于从某些分区/偏移位置开始,第二个Spark流程过程看起来是什么样的?)
补充工具栏:此问题可能与Mid-Stream Changing Configuration with Check-Pointed Spark Stream有关,因为可能需要部署类似的机制。
答案 0 :(得分:1)
您无法在正在运行的SparkStreamingContext
中回放流。牢记这些要点非常重要(直接来自文档):
- 一旦启动了上下文,就无法设置或添加新的流式计算。
- 上下文停止后,无法重新启动。
- 同时只能在JVM中激活一个StreamingContext。
StreamingContext上的- stop()也会停止SparkContext。要仅停止StreamingContext,请设置stop()的可选参数 将stopSparkContext称为false。
- 只要前一个StreamingContext停止(不停止),就可以重复使用SparkContext来创建多个StreamingContexts 创建下一个StreamingContext之前的SparkContext)
相反,您将不得不停止当前流,并创建一个新流。您可以使用其中一个createDirectStream
版本的fromOffsets
参数与签名Map[TopicAndPartition, Long]
启动来自特定偏移集的流 - 它是映射的起始偏移量按主题和分区。
另一个理论上的可能性是使用KafkaUtils.createRDD
将偏移范围作为输入。说出你的错误逻辑"从偏移量X开始,然后将其修复为偏移Y.对于某些用例,您可能只想使用从X到Y的偏移量createRDD
并处理这些结果,而不是尝试将其作为流