Hazelcast 3.3 - EntryProcessor 正在访问 "non-local" 个键

Hazelcast 3.3 - EntryProcessor is accessing "non-local" keys

我正在使用 Hazelcast 3.3。

一位成员将条目写入 IMap 并调用 map.executeOnEntries(myEntryProcessor)。 EntryProcessor 的任务只是在控制台上打印条目。但是,成员(其他 3 个和第一个 = 4 个成员)似乎打印了一组重叠的条目。 我的理解是 EntryProcessors 仅获取对应于 localKeySet() 的条目。然而,似乎并非如此。

有人可以解释一下这种行为吗?

你的推理是正确的。 EntryProcessor 应该只接触本地键。

你用什么作为密钥? Hazelcast 使用密钥的序列化版本作为实际密钥;所以也许你有 2 个不同的密钥实例导致相同的 'toString',但它们的二进制内容不同。

我曾用例如一个 HashMap 作为键的一部分;这可能导致不同的二进制内容,即使实际内容相同,然后你会得到奇怪的行为。

如果您正在使用例如Long 或 String 作为键;那么我无法解释您所看到的行为。复制这个有多难?

发现问题。问题不在于 EntryProcessors。实际上,将数据写入分布式 IMap 的代码 运行 超过了所需的成员数量。

因此,本质上,一个进程(通过 IExecutorService 启动)在多个实例上 运行 并发布 'overlapping sets'/ 重复数据集。 EntryProcessor 以正确的方式工作。