实体不会自动重定位到加入的节点

时间:2018-10-30 12:45:09

标签: scala akka akka-cluster

有关分片的问题。新节点加入后,实体是否应自动重定位?拥有一个单例演员,该演员向其onRecoveryCompleted处理函数中的每个实体发送消息,并且所有实体最终都与单例运行相同(OK)运行在同一节点上。在另一个节点加入后,实体的一半不会重定位到它(正如我期望的那样),但是,如果Singleton将消息发送到新实体,则它在第二个节点上生成(确定),因此,分片似乎很有效。

2 个答案:

答案 0 :(得分:0)

这可能与您的配置(或默认配置)有关,请尝试修改属性akka.cluster.sharding.rebalance-interval(默认10秒),最可能的情况是修改akka.cluster.sharding.least-shard-allocation-strategy.rebalance-threshold,以使其适应您的预期用例。您可以在configuration documentationShard 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个分片重新平衡到新节点中,并且这些分片在重新平衡后将重新启动其实体。