Storm Trident 和 Spark Streaming:分布式批处理锁定

Posted

技术标签:

【中文标题】Storm Trident 和 Spark Streaming:分布式批处理锁定【英文标题】:Storm Trident and Spark Streaming: distributed batch locking 【发布时间】:2015-02-12 11:25:22 【问题描述】:

在大量阅读和构建 POC 之后,我们仍然不确定 Storm Trident 或 Spark Streaming 是否可以处理我们的用例:

我们拥有数百万台设备(具有唯一标识符)的入站传感器数据流。 我们需要在每个设备级别上执行此流的聚合。聚合将读取之前批次中已经处理(和持久化)的数据。 关键点:当我们处理特定设备的数据时,我们需要确保没有其他进程正在处理该特定设备的数据。这是因为我们处理的结果会影响该设备的下游处理。实际上,我们需要一个分布式锁。 此外,事件设备数据需要按照事件发生的顺序进行处理。

基本上我们不能同时处理同一设备的两个批次。

trident/spark 流可以处理我们的用例吗?

任何建议表示赞赏。

【问题讨论】:

@Matthias J. Sax:你自己得到答案了吗?如果是,您选择了 Trident 或 Spark Streaming 中的哪一个?为什么? 我没有问这个问题... 您可以通过哈希函数将数据分派到不同的分区,使相同设备的数据在同一个进程中。 【参考方案1】:

既然你有唯一的 id,你能把它们分开吗?例如,只需将 id 除以 10,然后根据余数将它们发送到不同的处理框?这还应注意确保按顺序处理每个设备的事件,因为它们将被发送到同一个盒子。我相信 Storm/Trident 可以让你保证按顺序处理。不确定 Spark,但如果他们不知道,我会感到惊讶。

我不得不说,这是一个非常棒的问题要解决。

【讨论】:

以上是关于Storm Trident 和 Spark Streaming:分布式批处理锁定的主要内容,如果未能解决你的问题,请参考以下文章

storm trident 的介绍与使用

Storm Trident状态

storm trident function函数

storm trident function函数

storm trident merger

storm trident State