5

我们正在使用 Spark Streaming 创建一个实时流处理系统,该系统使用大量(数百万)分析模型应用于许多不同类型的传入度量数据流(超过 100000)中的 RDD。此流是原始流或转换流。每个RDD都要经过一个分析模型进行处理。由于我们不知道哪个 Spark 集群节点将处理来自不同流的哪些特定 RDD,因此我们需要使所有这些模型在每个 Spark 计算节点上都可用。这将在每个 spark 节点上产生巨大的开销。我们正在考虑使用内存数据网格在 Spark 计算节点上提供这些模型。这是正确的方法吗?

或者

我们是否应该避免一起使用 Spark 流,而只使用 Redis(带有 pub/sub)之类的内存数据网格来解决这个问题。在这种情况下,我们会将数据流式传输到包含特定模型的特定 Redis 节点。当然,我们将不得不做所有的分箱/窗口等。

请建议。

4

1 回答 1

6

在我看来,您需要结合流处理引擎和分布式数据存储。我会这样设计系统。

  1. 分布式数据存储(Redis、Cassandra 等)可以拥有您想要从所有节点访问的数据。
  2. 通过组合数据摄取系统(Kafka、Flume、ZeroMQ 等)接收数据流,并在流处理系统(Spark Streaming [最好是;)]、Storm 等中进行处理。
  3. 在用于处理流记录的函数中,必须从数据存储中提取必要的数据,并可能酌情在本地缓存。
  4. 您可能还必须根据应用程序需要从火花流更新数据存储。在这种情况下,您还必须担心要在步骤 3 中提取的数据的版本控制。

希望这是有道理的。如果没有确切的计算模型,很难给出实现的更多细节。希望这可以帮助!

于 2014-06-19T19:32:48.430 回答