如何监听Hazelcast缓存重分区与备份恢复事件以实现主题均匀订阅?
Hazelcast监听器选型:实现Topic的分布式独占订阅分配
我的应用需要通过发布-订阅消息服务订阅大量topic,所有topic名称以key形式存储在Hazelcast IMap分布式缓存中(关联信息为value)。当应用以多实例模式运行时,需要将这些topic均匀分配到各实例的本地缓存,并在本地缓存更新时自动完成topic的订阅/取消订阅,核心要求是任意时刻缓存中每个topic仅被一个实例订阅,具体场景包括:
- 实例1启动时,订阅所有key对应的topic;
- 实例2启动后,订阅一半key对应的topic,同时实例1取消对这些topic的订阅;
- 实例1宕机时,实例2自动订阅实例1原本持有的所有topic。
我需要选择合适的Hazelcast事件监听器,来监听重分区及备份恢复事件,请问应该用哪种?
我已经尝试过以下实现,但均存在问题:
- MembershipListener + CountDownLatch:通过比较
ClusterReadyCountDown前后的localKeySet来处理订阅/取消订阅,这是初始方案,但生产环境出现严重的订阅丢失、重复问题,推测是MembershipListener在数据重分发完成前就触发,导致订阅操作时机错误。 - LocalEventListener:仅在显式执行
map.put()/remove()等编程操作时触发,不会响应缓存重分区或从备份恢复的场景。 - MigrationListener:仅在节点正常加入或离开集群时触发,无法覆盖节点异常宕机的场景。
我曾查阅相关讨论,其中推荐MigrationListener,但该方案不符合我的需求。
内容的提问来源于stack exchange,提问作者Ruiisuuu
相关产品推荐
相关产品推荐

