Hazelcast的executeOnKey多节点重复执行,是否为Bug?
关于Hazelcast executeOnKey 重复执行日志的解释
这不是Hazelcast的Bug,而是分区迁移期间的正常现象,且executeOnKey本身依然是原子操作,具体原因如下:
- executeOnKey的原子性保证:该方法的设计逻辑是在目标键所属分区的当前所有者节点上执行操作,执行过程中会对目标键加锁,确保同一时间只有一个线程修改该键的值,最终只会有一个有效的写操作生效。
- 分区迁移导致的日志重复:你看到的两条日志对应同一个操作ID,说明是同一个请求在分区195从serverA迁移到serverB的过程中被不同节点记录。这种场景下,可能是客户端请求先路由到了旧分区所有者serverA,但此时分区所有权正在变更,Hazelcast会将请求转发到新所有者serverB执行;或者迁移瞬间的请求被临时处理,但最终只有新节点的操作会被确认,旧节点的操作会被丢弃。
- 数据一致性保障:Hazelcast在分区迁移过程中会严格保证数据一致性,旧节点在迁移完成后会彻底放弃对该分区的控制权,不会再提交任何未完成的写操作,因此不会出现数据被两次修改的情况。
补充验证建议
可以通过打印目标键的最终值来验证,结果只会保留一次setValue的修改,这也能佐证操作的原子性未被破坏。
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

