从Kafka源流式传输Spark DStreams作为使用者时,可以检查火花上下文,以便在应用程序崩溃(或受kill -9影响)时,应用程序可以从上下文检查点恢复。但是,如果该应用程序“意外地部署了不良逻辑”,则可能需要倒退到最后一个主题+分区+偏移量,以重播某些Kafka主题分区偏移位置中的事件,这些位置在“不良逻辑”之前运行良好。检查点生效时,流媒体应用程序如何退回到最后一个“好地方”(主题+分区+偏移)?

注意:在《 I(Heart)Logs》中,Jay Kreps撰写了有关使用并行消费者(组)过程的信息,该过程从不同的Kafka偏移位置开始,直到追上原始文档,然后杀死原始文档。 (从某些分区/偏移位置开始,第二Spark流处理过程看起来像什么?)

补充工具栏:此问题可能与Mid-Stream Changing Configuration with Check-Pointed Spark Stream有关,因为可能需要部署类似的机制。

最佳答案

您将无法在正在运行的SparkStreamingContext中倒带流。请牢记以下几点(直接来自文档):



一旦启动上下文,就无法设置新的流计算或将其添加到该流计算中。
上下文一旦停止,就无法重新启动。
JVM中只能同时激活一个StreamingContext。
StreamingContext上的stop()也会停止SparkContext。要仅停止StreamingContext,请设置stop()的可选参数
叫stopSparkContext为false。
只要先前的StreamingContext已停止(不停止),即可重复使用SparkContext创建多个StreamingContext。
创建下一个StreamingContext之前的SparkContext)



相反,您将不得不停止当前流,并创建一个新流。您可以使用一组带有标签createDirectStreamfromOffsets参数的Map[TopicAndPartition, Long]版本从一组特定的偏移量开始流-这是按主题和分区映射的起始偏移量。

另一个理论上的可能性是使用KafkaUtils.createRDD,它将偏移范围作为输入。假设您的“错误逻辑”从偏移量X开始,然后将其固定为偏移量Y。对于某些用例,您可能只想对X到Y的偏移量执行createRDD并处理这些结果,而不是尝试做作为流。

关于apache-spark - 来自Kafka源的Spark流返回到检查点或倒带,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36833193/

10-12 15:19