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

Lagom insert direct stream of events (records) to Cassandra

我是 Lagom 和持久性实体数据库概念的新手。

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

  1. 要存储分析结果,我仍然需要实施持久性实体(P.E)以将记录存储在 Cassandra 中,或者我应该购买传递它并直接存储到 Cassandra?我的应用程序既不支持删除也不支持更新。仅插入以可视化结果。 Flink & Spark 已经支持 Fault-Tolerance。

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

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

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

谢谢

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

如果您尝试在 Lagom 提供的驱动程序之上导入 cassandra 驱动程序,您可能会面临更多问题。在这种情况下,我建议您:(1) 不要依赖任何 lagom-persistence-xxx,以便只使用您的驱动程序或 (2) 使用 Lagom 的 lagomScaladslPersistenceCassandra 模块提供的 CassandraSession (参见 Lagom Persistence docs)。 如果您选择使用秒选项,则必须将 CassandraSession 添加到 class 的构造函数中,然后 Loader 中的依赖注入将确保提供足够的实例。查看链接代码中如何存在 3 arguments in the constructor and the the Loader uses macwire to inject 它们。请注意,您必须混合使用 ReadSideCassandraPersistenceComponents 特性,以便可以注入 CassandraSession