【问题标题】:How the akka-persistence-cassandra and Tags play together?akka-persistence-cassandra 和标签如何一起玩?
【发布时间】:2020-03-18 12:51:36
【问题描述】:

到目前为止,我只使用带有日志插件的akka​​-persistence-cassandra,并没有过多关注标签。

最近我做了一些实验来了解它是如何工作的,但是有些地方真的让我很困惑,所以我想在这里问那些...

现在,我知道标签的存在是为了让 Cassandra 可以创建多个标签和 timebuckets 分区,以防止 Cassandra 中出现热点。

当我配置 cassandra-journal 插件和事件标签时,我在 Cassandra 密钥空间中看到以下表格、消息、元数据、tag_scanning、tag_views、tag_write_progress...

现在如果没有配置标签,日志插件只写入消息表,但如果还配置了事件标签,它会同时保存到消息和 tag_scanning、tag_views、tag_write_progress 表...

  • 那么第一个问题,同时写消息和tag_scanning、tag_views、tag_write_progress的优势或原因是什么,这是否意味着Cassandra的负载更大?

  • 第二个问题,我是不是做错了什么,我必须以某种方式关闭 Journal Plugin 中的某些东西,所以它不会持续到消息中...

我在这里错过了什么?

谢谢解答...

【问题讨论】:

    标签: cassandra akka akka-persistence


    【解决方案1】:

    标签并非特定于 Cassandra 日志插件,而是 Akka Persistence/Akka Persistence Query 的通用概念,允许事件源应用程序标记事件子集并将这些事件作为流单独使用。

    标记通常用于将一个投影拆分/分片更新为多个工作人员,例如,请参阅此处的 CQRS Akka 示例:https://github.com/akka/akka-samples/tree/2.6/akka-sample-cqrs-scalahttps://github.com/akka/akka-samples/tree/2.6/akka-sample-cqrs-java

    事件总是存储在消息表中,即使它们被标记,所以标记反而会导致一些额外的写入。

    tag_write_progresstag_scanning 是与标记事件的一致性和顺序相关的实现细节。

    如果您没有在应用程序中使用标签,您可以完全禁用插件中的events-by-tag 支持,因为维护相关表会产生一些开销。

    【讨论】:

    • 首先感谢您的回答,但我仍然不明白标签的好处。我一直认为它们的存在是为了增加分片的缩放因子,但如果我编写和序列化两次,它就不会那么有益了。因此,如果我理解正确,如果使用了标签,那么在演员恢复期间会使用这些标签吗?
    • 不,它们不用于恢复。标签是可选的,因此如果您认为存储开销对您的用例有问题,您可以通过不使用标签来避免这种情况。
    • 我对 Akka Projection 和 Akka Persistence Query 有点困惑。请你解释一下。为什么我应该考虑使用 Akka Projection?我想实现一个 CQRS 应用程序。集群分片中的一些参与者将事件持久化到 Cassandra,读取端通过标记获取事件并发布到 Kafka 以在另一个微服务中使用。我可以只使用持久性查询吗? Akka Projection 只是 Persistence Query 的一个包装器吗?任何帮助将不胜感激
    猜你喜欢
    • 2017-10-02
    • 2017-02-23
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2014-10-07
    • 2016-11-09
    相关资源
    最近更新 更多