Akka集群分片:分片实体共享日志吗?

时间:2017-07-10 15:05:55

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

我正在关注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支持?它是不同分片中的持久性actor还是有关与其复制相关的分片的信息?究竟需要分发什么?我发现相关文档含糊不清,令人困惑。

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

  4. 一个有点相关的问题:我reimplemented基于PersistenceQuery现已弃用的PersistentView。我可以从journalActor查询日志中的事件,并设置一个流来接收其持久化事件。我测试了它,它的工作原理。但是我无法通过InMemoryJournalStorage在我的测试环境中接收分片演员中的事件(我不相信它是分布式日记)。在我的测试场景中,我只有一个分片和一个演员,我使用独特的persistenceId让演员查询它,但我没有在阅读方面收到任何事件。我是否缺少一些关于让Akka持久性与群集分片一起工作的东西?我应append/prepend persistenceId用于查询事件吗?

1 个答案:

答案 0 :(得分:1)

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

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

    1. 两个

    2. 是的,如果您希望故障转移工作。如果您不想进行故障转移,而您所拥有的只是一个分片,那么根本不会使用分片。

    3. 在没有看到您的部分代码的情况下无法判断。