Spark Streaming中的有序处理

时间:2015-06-04 20:50:40

标签: apache-spark spark-streaming

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

据我所知,这是不可能的 - 每个流都被分解为RDD,而RDDS是并行处理的,所以没有办法保证秩序。

2 个答案:

答案 0 :(得分:2)

您可以强制RDD成为单个分区,从而删除任何并行性。

答案 1 :(得分:1)

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

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

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

你有其他选择,这是不好的:)

  1. 正如霍尔登建议的那样,将所有内容都放在一个分区中
  2. 根据接收时间对某些增加功能进行分区,因此您可以逐个填充分区。然后你可以可靠地使用zipWithIndex。