Akka ConsistentHashingRouter行为不符合预期

Akka ConsistentHashingRouter行为不符合预期,akka,router,consistent-hashing,Akka,Router,Consistent Hashing,我使用一个一致的hashingrouter将数据从一个参与者分发到一组其他参与者。每条消息都包含一个元组,如下所示(items:Set[Int],msg:String)。我编写了一个case类,它实现了ConsistentHashable,将整数集定义为如下一致的哈希键 case class Message(items: Set[Int], msg: String) extends ConsistentHashable { def consistentHashKey = items }

我使用一个一致的hashingrouter将数据从一个参与者分发到一组其他参与者。每条消息都包含一个元组,如下所示
(items:Set[Int],msg:String)
。我编写了一个case类,它实现了ConsistentHashable,将整数集定义为如下一致的哈希键

case class Message(items: Set[Int], msg: String) extends ConsistentHashable {
   def consistentHashKey = items
}
现在,当我让一些生产者参与者向路由器发送大量消息时,路由器将它们非常不均匀地分布到目标节点

我尝试了不同数量的目标演员。在所有情况下,接收到最多消息的参与者获得的消息量都是接收到最少消息的参与者的两倍以上


使用哈希时,我希望消息在目标之间均匀分布,或者我在这里遗漏了什么?

consistentHashKey返回将用于计算哈希键的对象(如果不返回字符串或字节数组,它将对该对象的序列化字节应用哈希)。我不知道这是如何平均分布的,你应该看看你遇到的“项目”值——这些值可能有很大的偏差

而且,一致散列并不是完全均匀分布的。见:


简言之,散列键的间隔被包装成一个环,这个环被随机点(节点的散列)细分为间隔(bucket)。这些桶的大小可能不相等。通常情况下,节点越多,它们就越“相等”,但这并不能保证。

感谢您的回复。我想我会简单地使用相当多的目标参与者,随机分配到不同的机器上,从而增加负载。