apache-spark - Spark 或 Storm (三叉戟)

标签 apache-spark redis apache-storm

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

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

现在,我们从消息队列 (Kafka) 中读取一条消息,需要找到同时存在于 S1 和 S2 中的所有元素(基本上是找到 **S1∩S2 )。现在对于小集合,Redis 本身可以有效地进行交集,但我们预计这些集合的大小可能以百万为单位。**

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

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

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

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

最佳答案

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

我不熟悉 Spark 的详细信息,但“相交”听起来像是一个批处理运算符——所以我不确定它是否会在 Spark Streaming 中可用——你应该仔细检查一下(我假设你想在比较 Spark 和 Storm 时使用 Spark Streaming)。如果您想进行批处理,使用 Spark 并利用“相交”运算符听起来很合理。

在流处理中进行“相交”不同于批处理。然而,它基本上是一个连接操作,实现起来应该不难(只要系统提供了合适的连接操作符)。

正如您提到的,您将使用来自 Kafka 的消息,可能值得尝试 Kafka Streams ,Kafka的流处理库。因此,您不需要运行额外的系统。 Kafka Streams 提供丰富的 DSL,包括滑动窗口连接。

如果你想使用流处理框架,我宁愿使用 Flink这(恕我直言)比 Storm(或 Spark)更好。

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

关于apache-spark - Spark 或 Storm (三叉戟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41629668/

相关文章:

hadoop - 使用Spark转换文件压缩格式

apache-spark - Spark 提交错误: No main class set in JAR; please specify one with --class

apache-spark - 将命令行参数传递给 Spark-shell

redis - Chicago_boss 和 redis 配置

hadoop - 将 HDFS 数据流式传输到 Storm(又名 HDFS spout)

java - 如何在 linux 系统启动脚本中启用 java 路径?

sql - 如何将架构添加到 spark Scala 中另一个文件的文件

django - 开发高性能、可扩展的 Comet 应用程序

redis - 获取多组

hadoop - Apache flume 和 Apache storm 有什么区别?