Hug*_*nto 7 events cassandra cassandra-2.0 apache-spark
我们目前正在使用Hazelcast(http://hazelcast.org/)作为分布式内存数据网格.这对我们来说一直很好,但是单独使用内存已经在我们的用例中耗尽了它的路径,我们正在考虑将我们的应用程序移植到NoSQL持久存储中.在通常的比较和评估之后,我们接近挑选Cassandra,最后选择Spark进行分析.
尽管如此,我们的架构需求存在差距,我们仍然没有掌握如何在Cassandra中解决(有或没有Spark):Hazelcast允许我们创建一个连续查询,无论何时添加/删除/修改行该子句的结果集,Hazelcast回调了相应的通知.我们使用它来通过AJAX流与新的/更改的行不断更新客户端.
这可能是我们正在制造的概念上的不匹配,所以 - 如何在Cassandra中最好地解决这个用例(有或没有Spark的帮助)?API中是否存在允许对键/子句更改进行连续查询(尚未找到)的内容?是否有其他方法来获取密钥/子句更新流?某种事件?
我知道我们最终可以定期轮询Cassandra,但在我们的用例中,客户可能会对大量的表子句通知感兴趣(想想"加利福尼亚海岸线上船位的所有变化"),并且迭代出来商店会破坏流媒体的可扩展性.
因此,神奇的问题是:我们缺少什么?Cassandra是错误的工具吗?我们不知道apache领域内外的API或外部库的特定部分是否允许这样做?
非常感谢您的帮助!
雨果
我不是火花方面的专家,所以对此持保留态度,但也许你可以使用这样的方法:
使用 Spark Streaming 对传入数据流进行实时分析,并将位置更新实时推送给客户端。
使用 Cassandra 进行持久存储、缓存视图以及客户端可以从中提取数据的数据汇总。
因此,您将编写一个 Spark 流应用程序来连接到传入的数据流,大概是定期报告船舶位置的应用程序。当它收到船舶位置时,它将在 Cassandra 中查找船舶的最后已知位置(之前存储在该船舶 id 的位置的集群时间序列中,按时间戳反向排序,以便最新的位置是第一行) 。如果船舶位置发生变化,Spark 应用程序将在 Cassandra 中插入新的时间序列行,并将新位置推送到实时客户端。
Spark 还将编写 Cassandra 的其他更新,以汇总客户可能想知道的信息,例如当前旧金山湾有多少艘船的表格。当客户端单击间隔时,将查询汇总表以提取该数据进行显示。客户端上任何需要快速响应时间的内容都应该由 Spark 预先计算并存储在 Cassandra 中以便快速检索。
当新客户端启动时,它们首先会查询(从)Cassandra 获取所有船只的当前位置,然后从 Spark 应用程序推送该数据的实时更新。