Spark Streaming 中的顺序处理
In-order processing in Spark Streaming
是否可以在 Spark Streaming 中强制执行顺序处理?我们的用例是从 Kafka 读取事件,其中每个主题都需要按顺序处理。
据我所知,这是不可能的——每个流都被分解成 RDD,并且 RDDS 是并行处理的,因此无法保证顺序。
您可以将 RDD 强制为单个分区,从而消除任何并行性。
"Our use case is reading events from Kafka, where each topic needs to be processed in order. "
据我了解,每个主题形成单独的数据流。所以你应该一个接一个地处理每个 Dstreams。
但很可能你的意思是你想按顺序处理从 1 个 Kafka 主题获得的每个事件。在这种情况下,您不应该依赖于 RDD 中记录的排序,而应该在第一次看到它们时(可能是上游)用时间戳标记每条记录,并在以后使用此时间戳进行排序。
你还有其他的选择,这些都不好:)
- 按照 Holden 的建议,将所有内容放在一个分区中
- 分区有一些按接收时间递增的功能,让你一个接一个地填满分区。然后你就可以可靠地使用 zipWithIndex 了。
是否可以在 Spark Streaming 中强制执行顺序处理?我们的用例是从 Kafka 读取事件,其中每个主题都需要按顺序处理。
据我所知,这是不可能的——每个流都被分解成 RDD,并且 RDDS 是并行处理的,因此无法保证顺序。
您可以将 RDD 强制为单个分区,从而消除任何并行性。
"Our use case is reading events from Kafka, where each topic needs to be processed in order. "
据我了解,每个主题形成单独的数据流。所以你应该一个接一个地处理每个 Dstreams。
但很可能你的意思是你想按顺序处理从 1 个 Kafka 主题获得的每个事件。在这种情况下,您不应该依赖于 RDD 中记录的排序,而应该在第一次看到它们时(可能是上游)用时间戳标记每条记录,并在以后使用此时间戳进行排序。
你还有其他的选择,这些都不好:)
- 按照 Holden 的建议,将所有内容放在一个分区中
- 分区有一些按接收时间递增的功能,让你一个接一个地填满分区。然后你就可以可靠地使用 zipWithIndex 了。