维护传入流数据的时间戳序列

Maintaining timestamp sequence of incoming streaming data

所以我使用结构化流将一些 json 数据从 kafka 推送到 Spark。字典形式的数据有一个字段"timestamp"。在解析 json 并为每个键获取单独的列后,我注意到时间戳字段不在它被推送到 kafka 集群的顺序中,即

+----------+
| Timestamp|
+----------+
|     1    |
|     2    |
|     6    |  <--
|     4    |
|     5    |
|     7    |  <--
+----------+

有什么方法可以确保数据保持顺序?我能想到的一件事是在 output_mode="complete" 的时间戳上使用 orderby。还有其他有效的选择吗? 谢谢

Kafka 只保证分区内的消息顺序。如果你想要 Kafka 中的严格顺序 - 每个主题保留一个分区并保证在那里交付时的顺序。您可能想要实现 "ordering service",它从传入队列读取消息并将消息写入另一个只有一个分区的队列。可以在各种博客文章中找到很好的解释和示例:here or here 等。

在 Spark 中排序消息是最简单的选择。您应该考虑将排序的结果保存或缓存到存储中以供重复使用。