我们正在创建一个带有火花流的实时流处理系统,该系统使用大量(数百万)分析模型应用于许多不同类型的传入度量数据流(超过100000)中的RDD.此流是原始流或转换流.每个RDD都必须通过分析模型进行处理.由于我们不知道哪个Spark群集节点将处理来自不同流的特定RDD,因此我们需要在每个Spark计算节点上使所有这些模型可用.这将在每个火花节点产生巨大的开销.我们正在考虑使用内存数据网格在spark计算节点上提供这些模型.这是正确的方法吗?
要么
我们应该避免一起使用Spark流,只需使用像Redis(使用pub/sub)这样的内存数据网格来解决这个问题.在这种情况下,我们将数据流式传输到包含特定模型的特定Redis节点.当然我们必须做所有的装箱/窗户等.
请建议.
听起来像我需要流处理引擎和分布式数据存储的组合.我会像这样设计系统.
分布式数据存储(Redis,Cassandra等)可以包含您要从所有节点访问的数据.
通过组合数据摄取系统(Kafka,Flume,ZeroMQ等)接收数据流,并在流处理系统(Spark Streaming [优选;]],Storm等中处理它.
在用于处理流记录的函数中,必须从数据存储中提取必要的数据,并且可以根据需要在本地缓存.
您可能还需要根据应用程序的需要从火花流更新数据存储.在这种情况下,您还必须担心要在第3步中提取数据的版本.
希望这是有道理的.没有精确的计算模型,很难给出更具体的实现细节.希望这可以帮助!