Lagom将直接的事件流(记录)插入Cassandra

时间:2017-04-19 08:36:15

标签: scala cassandra spark-streaming lagom flink-cep

我是Lagom和Persistence Entities Database概念的新手。

我正在构建Streaming Analytics Engine。我的每个分析都将作为独立的微服务工作,并根据其设计理念为每个单独的微服务保存在自己的数据库中(我的案例是Cassandra)。我正在使用Flink&用于流分析的Spark然后使用Phantom for Flink(Cassandra的Scala驱动程序)沉入Cassandra。我无法理解Lagom Framework中的以下挑战。

  1. 为了存储分析结果,我还需要实现持久性实体(P.E)来存储Cassandra中的记录,或者我应该购买 - 通过它并可以直接存储到Cassandra?我的应用程序既不支持删除也不更新。仅插入以显示结果。 Flink& Spark已经支持Fault-Tolerance。

  2. 如何在没有持久性实体的情况下访问Cassandra会话?

  3. 如果我在Lagom中使用Phantom驱动程序,那么它与Lagom的嵌入式Cassandra有一些冲突;无法在服务定位器中注册服务。

  4. 您能否建议我应该如何处理这种情况。换句话说,每个微服务,其架构基于KAPPA Architecture

    由于

1 个答案:

答案 0 :(得分:2)

如果你有一个事件流,那么每个使用它的微服务都可以保留一个维护物化视图的所有事件的副本。可以在online-auction示例应用程序的搜索服务上看到此类微服务的示例。在链接代码中,消费者使用两个不同的流(在本例中为Kafka主题)并将数据存储到ElasticSearch索引中。 使用Cassandra或其他数据库也可以实现同样的目的。

如果您尝试在Lagom提供的内容之上导入cassandra驱动程序,则可能会遇到更多问题。在这种情况下,我建议你:(1)不要依赖任何lagom-persistence-xxx,以便只使用你的驱动程序或(2)使用Lagom提供的CassandraSession lagomScaladslPersistenceCassandra模块(参见Lagom Persistence docs)。 如果选择使用seconds选项,则必须将CassandraSession添加到类的构造函数中,然后Loader中的依赖注入将确保提供足够的实例。了解链接代码中的3 arguments in the constructor以及加载程序如何使用macwireinject。请注意,您必须混合使用ReadSideCassandraPersistenceComponents特征,以便注入CassandraSession