从Kafka源返回到检查点或回放的Spark流

pgpifvop  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(391)

当从kafka源以消费者的身份流式传输spark数据流时,可以检查spark上下文,以便在应用程序崩溃(或受 kill -9 ),应用程序可以从上下文检查点恢复。但是,如果应用程序是“意外地用错误逻辑部署的”,人们可能会希望倒回到最后一个主题+分区+偏移位置,以重放某个kafka主题的分区偏移位置的事件,这些位置在“错误逻辑”之前工作正常。当检查点生效时,流式应用程序如何重回到最后一个“好位置”(主题+分区+偏移)?
注意:在i(heart)日志中,jaykreps写到了使用一个并行的消费者(group)过程,这个过程从Kafka偏移量的发散位置开始,直到赶上原作,然后杀死原作(从某些分区/偏移位置开始的第二个spark流处理看起来像什么?)
侧边栏:这个问题可能与中流使用检查点Spark流更改配置有关,因为可能需要部署类似的机制。

wn9m85ua

wn9m85ua1#

你不能在跑步中倒带一条流 SparkStreamingContext . 记住这些要点很重要(直接从文档中):
一旦上下文启动,就不能设置或添加新的流计算。
上下文一旦停止,就不能重新启动。
一个jvm中同时只能有一个streamingcontext处于活动状态。
streamingcontext上的stop()也会停止sparkcontext。要仅停止streamingcontext,请将stop()的可选参数stopsparkcontext设置为false。
只要在创建下一个streamingcontext之前停止上一个streamingcontext(不停止sparkcontext),sparkcontext就可以重新用于创建多个streamingcontext
相反,您必须停止当前流,并创建一个新的流。可以使用的一个版本从特定的偏移集启动流 createDirectStream 那得花点时间 fromOffsets 带签名的参数 Map[TopicAndPartition, Long] --它是由主题和分区Map的起始偏移量。
另一种理论上的可能性是 KafkaUtils.createRDD 它将偏移范围作为输入。假设你的“坏逻辑”从偏移量x开始,然后你在偏移量y处修复了它。对于某些用例,您可能只想 createRDD 使用从x到y的偏移量并处理这些结果,而不是尝试将其作为流来处理。

相关问题