hadoop - 如何使用 Spark Streaming 确保事件的有序处理?

标签 hadoop apache-spark apache-storm amazon-kinesis

我有一个用例,我想处理大量事件。这些事件中包含多个属性。但是,我想确保对于给定的属性(键),在给定时间运行的 spark 执行不超过 1 个,因为如果对同一个键并行运行两个执行,最终结果将由竞争条件决定.

我的模型是这样的:

  • 从某个系统接收更改事件。
  • 使用本地数据库中的属性丰富事件。
  • 使用 Kinesis 将 enrich 事件发送到 spark streaming。
  • 使用输出更新本地数据库。

apace-storm 是否是此类系统的更好竞争者?

最佳答案

Amazon Kinesis 使用流中的分片作为数据容器。在分片内,可以保证按顺序处理这些值。

您可以针对您的用例利用此功能:因此,在将记录放入流中时使用预定义的“分区键”值。

例如,如果您要处理用户值,则可以使用用户事件的 ID 作为生产者端 的分区键。

  • 用户 #1:首先进行购买,然后更新分数,然后浏览到页面 X 等。
  • 用户 #2:首先执行 X,然后执行 Y,然后 Z 事件发生等等。

这样,您就可以确保及时处理单个用户的事件。您将对不同用户的事件(即 Kinesis 记录)进行并行处理。

关于hadoop - 如何使用 Spark Streaming 确保事件的有序处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40874944/

相关文章:

hadoop - HDFS中小文件瓶颈的解决方案

scala - Spark数据集解压函数

hadoop - 通过API将XML数据降落到Hadoop中

hadoop - hadoop : how to store metadata? 中的大文件

scala - Web UI(http://localhost:8088)未显示Spark应用程序

java - Spark 到 HCatalog,无需 Spark SQL

java - HDInsight Storm 无法使用示例应用程序读取/写入 EventHub

elasticsearch - 充满 Elasticsearch ,无法获得总是为空的Client

sql - 从Apache HIVE或SQL中的两个表获取计数

scala - Spark DataFrame 计算列