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

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

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

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

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

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

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

谢谢

回答(1)

2 years ago

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

如果您尝试在's provided by Lagom. In that case I would suggest that you: (1) don'依赖于任何lagom-persistence-xxx之上导入cassandra驱动程序,以便仅使用您的驱动程序或(2)使用Lagom的 lagomScaladslPersistenceCassandra 模块提供的 CassandraSession ,则可能会遇到更多问题(请参阅Lagom Persistence docs ) . 如果选择使用秒选项,则必须将 CassandraSession 添加到类的构造函数中,然后 Loader 中的依赖注入将确保提供足够的实例 . 看看在链接代码中如何3 arguments in the constructor和Loader使用 macwireinject . 请注意,您必须混合 ReadSideCassandraPersistenceComponents 特性,以便注入 CassandraSession .