【问题标题】:Spark Streaming from Kafka Source Go Back to a Checkpoint or Rewinding来自 Kafka 源的 Spark Streaming 返回到检查点或倒带
【发布时间】:2016-08-18 09:48:12
【问题描述】:

当作为消费者从 Kafka 源流式传输 Spark DStreams 时,可以检查 spark 上下文,因此当应用程序崩溃(或受 kill -9 影响)时,应用程序可以从上下文检查点恢复。但是,如果应用程序“意外地以错误的逻辑部署”,则可能希望回退到最后一个主题+分区+偏移量,以从某个 Kafka 主题的分区偏移位置重放事件,这些偏移位置在“错误逻辑”之前工作正常。当检查点生效时,流应用程序如何倒回到最后一个“好点”(主题+分区+偏移量)?

注意:在 I (Heart) Logs 中,Jay Kreps 写到使用并行消费者(组)进程,该进程从不同的 Kafka 偏移位置开始,直到赶上原始数据,然后杀死原始数据。 (从某些分区/偏移位置开始,第二个 Spark 流式处理过程是什么样的?)

侧边栏:这个问题可能与Mid-Stream Changing Configuration with Check-Pointed Spark Stream 有关,因为可能需要部署类似的机制。

【问题讨论】:

    标签: apache-spark apache-kafka spark-streaming kafka-consumer-api


    【解决方案1】:

    您将无法在正在运行的SparkStreamingContext 中倒带流。牢记这些要点很重要(直接来自文档):

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2018-01-29
      • 1970-01-01
      相关资源
      最近更新 更多