我有一个用例,我想处理大量事件。这些事件中包含多个属性。但是,我想确保对于给定的属性(键),在给定时间运行的 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/