有关分片的问题。新节点加入后,实体是否应自动重定位?拥有一个单例演员,该演员向其onRecoveryCompleted处理函数中的每个实体发送消息,并且所有实体最终都与单例运行相同(OK)运行在同一节点上。在另一个节点加入后,实体的一半不会重定位到它(正如我期望的那样),但是,如果Singleton将消息发送到新实体,则它在第二个节点上生成(确定),因此,分片似乎很有效。
答案 0 :(得分:0)
这可能与您的配置(或默认配置)有关,请尝试修改属性akka.cluster.sharding.rebalance-interval
(默认10秒),最可能的情况是修改akka.cluster.sharding.least-shard-allocation-strategy.rebalance-threshold
,以使其适应您的预期用例。您可以在configuration documentation和Shard Rebalancing section中找到更多信息。
答案 1 :(得分:0)
添加具有分片区域的新节点时,akka将在群集中的所有分片区域中检查the difference between most and least number of allocated shards
。如果差异大于akka.cluster.sharding.least-shard-allocation-strategy.rebalance-threshold
(请参阅configuration documentation),则akka将开始重新分配分片。当分片由于重新平衡而重新启动并且akka.cluster.sharding.remember-entities
设置为on
时,该分片将重新启动其实体(默认情况下,akka.cluster.sharding.remember-entities
设置为off
,并且所有分片将在其后丢失所有实体重新平衡)。
因此,如果您有一个节点的分片区域具有20个分片,并且您添加了一个具有分片区域的新节点,并且旧节点分片号(20)与新节点分片号(0)之差大于{将{1}}的值和akka.cluster.sharding.least-shard-allocation-strategy.rebalance-threshold
设置为akka.cluster.sharding.remember-entities
,akka将把10个分片重新平衡到新节点中,并且这些分片在重新平衡后将重新启动其实体。