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 以正确的方式工作。
我正在使用 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 以正确的方式工作。