【问题标题】:Akka cluster sharding: do shard entities share a journal?Akka 集群分片:分片实体是否共享一个日志?
【发布时间】:2017-07-11 03:38:30
【问题描述】:

我正在关注 akka tutorial 演示集群分片。在sharding example集群中,作者启动了一个共享日志,并发表如下评论:

// Start the shared journal one one node (don't crash this SPOF)
// This will not be needed with a distributed journal

使用的期刊is

journal.plugin = "akka.persistence.journal.leveldb-shared"
  1. 为什么分片实体共享一个日志?我的理解是 Akka 持久性不支持多次写入,但支持多次读取。共享期刊需要什么?我的印象是每个坚持不懈的演员都有自己的日记。为什么非共享LeveldbJournal 不支持分布式读取?这样做有什么困难吗?

  2. 本教程基于 Akka 2.4,在此版本中,集群分片使用 persistence 作为 akka.cluster.sharding.state-store-mode 的默认值。在这个例子中,哪个组件确切地使用了 snapshop/journal 支持?是不同分片中的持久参与者还是与复制相关的分片信息?究竟需要分发什么?我发现相关文档含糊不清且令人困惑。

  3. 如果我只有一个分片,我是否需要分布式日志?

  4. 一个有点相关的问题:我有 reimplemented 基于 PersistenceQuery 的现已弃用的 PersistentView。我可以在日志中查询来自 persistentActor 的事件,并设置一个流来接收其持久事件。我已经对其进行了测试,并且可以正常工作。但是,我无法让它在我的测试环境中使用InMemoryJournalStorage(我不相信它是分布式日志)接收分片actor中的事件。在我的测试场景中,我只有一个分片和一个演员,我使用唯一的persistenceId 让演员查询它,但我在读取端没有收到任何事件。关于让 Akka 持久性与集群分片一起工作,我有什么遗漏吗?我应该是append/prepending persistenceId 用于查询事件吗?

【问题讨论】:

    标签: akka persistence sharding persistent-storage eventual-consistency


    【解决方案1】:
    1. 它们不应该,至少不在生产代码中,请参阅此处的警告说明: http://doc.akka.io/docs/akka/current/java/persistence.html#shared-leveldb-journal

    共享的 LevelDB 实例是单点故障,因此只能用于测试目的。

    1. 两者

    2. 是的,如果您希望故障转移正常工作。如果您不想要故障转移并且您只有一个分片,那么使用分片就毫无意义。

    3. 不看你的一些代码就无法判断。

    【讨论】:

    • 谢谢。所以re:4,所以基本上是环境,是我可以让PersistentView在Akka 2.4中工作的环境,现在我试图用上面链接的基于PersistenceQuery的QueryView替换它。我试图重现一个最小的例子但我对LeveldbSharedJournal 的事情感到困惑。无论如何,您对问题 1-3 的回答似乎表明我不应该为了从日志插件中查询持久性角色的持久性 ID 而真正改变它,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多