【问题标题】:Spark or Storm (Trident)火花或风暴(三叉戟)
【发布时间】:2017-05-28 12:48:35
【问题描述】:

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

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

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

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

我对 Storm 的基本 Spout 和 Bolts 有一点经验,我认为它无法在这里有效地工作,因为我们必须在其中一个 bolt 内编写交集的逻辑。探索三叉戟是否有用,但在我看来它可能不够用。

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

这里有人可以提供一些观点吗?

【问题讨论】:

    标签: apache-spark redis apache-storm


    【解决方案1】:

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

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

    在流处理中进行“相交”与批处理不同。但是,它基本上是一个join操作,实现起来应该不难(只要系统提供了适当的join操作)。

    正如您提到您将使用来自 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

    【讨论】:

    • 感谢 Matthias 的输入 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多