火花或风暴(三叉戟)

时间:2017-01-13 07:45:59

标签: apache-spark redis apache-storm

我正在尝试在我们的系统中扩展一个组件,并考虑在Storm(Trident)和Spark之间应该采用什么更好的方法。

因此,我们有2个大型集合,可以包含最多存储在redis集群中的百万个事件。说S1和S2。

现在,我们从消息队列(Kafka)中读取消息,并且需要找到S1和S2中存在的所有元素(基本上找到**S1∩S2)。现在对于小集合,Redis本身可以有效地完成交集,但我们预计这些集合的大小可以达到百万。**

为了解决上述问题,我们正在寻找一些分布式计算框架(即Storm和Spark)。

我对使用Storm的基本Spouts和Bolts有一点经验,并且认为它无法在这里有效地工作,因为我们必须在我们的一个螺栓中写入交集的逻辑。探索Trident是否有用,但在我看来它可能无法提供足够的效果。

另一方面, Spark在其核心提供了RDD,它提供了交叉,union等操作,可以开箱即用地处理,我猜我们是从消息队列中读取消息并将任务提交给将从redis读取的spark集群并有效地计算S1∩S2。因此,我认为Spark非常适合我们的用例。 如果Storm和Spark都可以提供帮助,我会倾向于使用Storm。

这里的任何人都可以提供一些观点。

1 个答案:

答案 0 :(得分:1)

免责声明:我是Flink和Storm的提交者,在Confluent担任软件工程师,专注于Kafka Streams。

我不熟悉Spark细节,但“相交”听起来像批处理操作符 - 所以我不确定,如果它可以在Spark Streaming中使用 - 你应该仔细检查一下(我假设你想要将Spark与Storm进行比较时使用Spark Streaming。如果你想进行批处理,那么使用Spark并利用“交叉”运算符听起来是合理的。

在流处理中执行“交叉”与批处理不同。但是,它基本上是一个连接操作,它应该不难实现(只要系统提供了正确的连接运算符)。

正如您提到的那样,您将收集来自Kafka的消息,可能值得尝试Kafka Streams,Kafka的流处理库。因此,您无需运行其他系统。 Kafka Streams提供丰富的DSL,包括滑动窗口连接。

如果你想使用流处理框架,我宁愿使用{IMH}的Flink比Storm(或Spark)更好。

另请参阅Confluent的Kafka Streams文档,这些文档比Apache Kafka的Kafka Streams文档更详细:http://docs.confluent.io/current/streams/index.html

相关问题