Hazelcast 集群:两个实例之间的条目添加不一致

问题描述 投票:0回答:1

我正在运行一个应用程序的两个实例,每个实例都应该在启动期间将其主机信息添加到名为“hosts”的 Hazelcast 映射中。

HazelcastInstance hz = Hazelcast.newHazelcastInstance(); IMap<String, Void> set = hz.getMap("hosts"); set.set(host, Void, ttl, TimeUnit.SECONDS);

但是,我注意到了一个意想不到的行为。实例 1 正确地将其主机信息添加到地图中,但奇怪的是,它还添加了实例 2 的主机信息。另一方面,实例 2 没有将任何主机信息添加到地图中。

1- 两个实例都使用相同的代码将条目添加到“主机”映射。 2- 我已验证每个实例检索到的主机信息是正确的。 3- 集群已正确形成,因为两个实例在 Hazelcast 管理中心中均可见。 4- 地图也已创建并有 2 个成员。成员 1 添加 2 个条目,但成员 2 添加 0 个条目。

我试图理解为什么实例 1 为其自身和实例 2 添加条目,而实例 2 没有添加任何条目。添加条目的逻辑似乎是正确的,并且集群形成没有明显的问题。

java spring-boot hazelcast hazelcast-imap
1个回答
0
投票

插入映射总是由集群成员(更具体地说,分区线程)执行,而不是拥有所插入的键。在您的情况下,“主机”键都散列为最终由同一成员拥有的值。通过让拥有线程执行操作,而不是让任何成员更新任何键,Hazelcast 可以确保线程安全行为,而不需要您在更新映射之前锁定映射。 (键可能已散列到同一分区,也可能未散列到同一分区,但似乎它们必须已散列到驻留在同一成员上的分区)。

© www.soinside.com 2019 - 2024. All rights reserved.