Akka 集群分片:分片实体共享日志吗?
Akka cluster sharding: do shard entities share a journal?
我正在关注一个 akka tutorial demonstrating cluster sharding. In the cluster 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"
为什么分片实体共享一个日志?我的理解是 Akka 持久性不支持多次写入但支持多次读取。共享日志的必要性是什么?我的印象是每个坚持不懈的演员都有自己的日记。为什么非共享 LeveldbJournal
不支持分发读取?这样做有什么困难吗?
本教程基于 Akka 2.4,在此版本中,集群分片使用 persistence
作为 akka.cluster.sharding.state-store-mode
的默认值。在此示例中,哪个组件确切地使用了 snapshop/journal 支持?它是不同分片中的 Persistent actor 还是关于与其复制相关的分片信息?究竟需要分发什么?我发现相关文档含糊不清。
如果我只有一个分片,我需要分布式日志吗?
一个有点相关的问题:我有 reimplemented the now deprecated PersistentView based on PersistenceQuery
。我可以在日志中查询来自 persistentActor 的事件,并设置一个流来接收它的持久化事件。我已经测试过它并且有效。但是,在我的测试环境中,我无法使用 InMemoryJournalStorage
(我认为这不是分布式日志)接收分片参与者中的事件。在我的测试场景中,我只有一个分片和一个演员,我使用唯一的 persistenceId
演员来查询它,但我在读取端没有收到任何事件。关于让 Akka 持久性与集群分片一起工作,我缺少什么吗?我应该 append/prepend
ing 用于查询事件的 persistenceId
吗?
- 它们不应该,至少在生产代码中不应该,请参阅此处的警告说明:
http://doc.akka.io/docs/akka/current/java/persistence.html#shared-leveldb-journal
A shared LevelDB instance is a single point of failure and should therefore only be used for testing purposes.
两者
是的,如果您希望故障转移起作用。如果您不想要故障转移并且您只有一个分片,那么使用分片根本就没有意义。
不看你的一些代码就无法判断。
我正在关注一个 akka tutorial demonstrating cluster sharding. In the cluster 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"
为什么分片实体共享一个日志?我的理解是 Akka 持久性不支持多次写入但支持多次读取。共享日志的必要性是什么?我的印象是每个坚持不懈的演员都有自己的日记。为什么非共享
LeveldbJournal
不支持分发读取?这样做有什么困难吗?本教程基于 Akka 2.4,在此版本中,集群分片使用
persistence
作为akka.cluster.sharding.state-store-mode
的默认值。在此示例中,哪个组件确切地使用了 snapshop/journal 支持?它是不同分片中的 Persistent actor 还是关于与其复制相关的分片信息?究竟需要分发什么?我发现相关文档含糊不清。如果我只有一个分片,我需要分布式日志吗?
一个有点相关的问题:我有 reimplemented the now deprecated PersistentView based on
PersistenceQuery
。我可以在日志中查询来自 persistentActor 的事件,并设置一个流来接收它的持久化事件。我已经测试过它并且有效。但是,在我的测试环境中,我无法使用InMemoryJournalStorage
(我认为这不是分布式日志)接收分片参与者中的事件。在我的测试场景中,我只有一个分片和一个演员,我使用唯一的persistenceId
演员来查询它,但我在读取端没有收到任何事件。关于让 Akka 持久性与集群分片一起工作,我缺少什么吗?我应该append/prepend
ing 用于查询事件的persistenceId
吗?
- 它们不应该,至少在生产代码中不应该,请参阅此处的警告说明: http://doc.akka.io/docs/akka/current/java/persistence.html#shared-leveldb-journal
A shared LevelDB instance is a single point of failure and should therefore only be used for testing purposes.
两者
是的,如果您希望故障转移起作用。如果您不想要故障转移并且您只有一个分片,那么使用分片根本就没有意义。
不看你的一些代码就无法判断。