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

问题描述 投票:0回答:1

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

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

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

apache-spark apache-kafka apache-spark-sql spark-structured-streaming
1个回答
1
投票

Kafka保证消息仅在分区内排序。如果您想在Kafka内严格订购-每个主题保留一个分区,并保证在其中分发时订购。您可能要实现“订购服务”,该服务从传入队列中读取并将消息写入仅具有一个分区的另一个队列。在各种博客文章中都可以找到很好的解释和示例:herehere以及更多。

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

© www.soinside.com 2019 - 2024. All rights reserved.