【问题标题】:In-order processing in Spark StreamingSpark Streaming 中的有序处理
【发布时间】:2015-06-05 08:25:22
【问题描述】:

是否可以在 Spark Streaming 中强制执行有序处理?我们的用例是从 Kafka 读取事件,其中每个主题都需要按顺序处理。

据我所知,这是不可能的 - 每个流都分解成 RDD,并且 RDDS 是并行处理的,因此无法保证顺序。

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    您可以强制 RDD 成为单个分区,这会消除任何并行性。

    【讨论】:

    • 但是 DStream 被分解为 RDD - 第二个 RDD 不可能在第一个之前完成处理吗?
    • 根据文档“默认情况下,输出操作一次执行一个。它们按照它们在应用程序中定义的顺序执行。”
    【解决方案2】:

    “我们的用例是从Kafka读取事件,每个主题都需要按顺序处理。”

    据我了解,每个主题形成单独的 Dstream。所以你应该一个接一个地处理每个 Dstream。

    但很可能您的意思是您希望按顺序处理从 1 个 Kafka 主题获得的每个事件。在这种情况下,您不应该依赖 RDD 中记录的顺序,而是应该在第一次看到它们时(可能在上游)用时间戳标记每条记录,并在以后使用此时间戳进行排序。

    你还有其他选择,但很糟糕:)

    1. 按照 Holden 的建议,将所有内容放在一个分区中
    2. 分区有一些根据接收时间递增的函数,所以你一个接一个地填满分区。然后你就可以可靠地使用 zipWithIndex 了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2020-05-02
      • 1970-01-01
      • 2021-05-22
      • 2016-02-14
      相关资源
      最近更新 更多