You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Hazelcast Scheduled Executor固定任务运行实例仅故障时迁移

问题根因

你遇到的新实例启动后任务自动迁移到新实例的问题,是Hazelcast Scheduled Executor Service的默认行为导致的:默认配置下,定时任务绑定到集群的某一个分区,当集群有新成员加入触发分区重平衡时,任务会随所属分区一同迁移到新的分区所有者节点执行,因此会打破原有的调度周期。

解决方案

只需调整定时执行器的配置,关闭分区重平衡时的任务自动迁移即可,配置开启后仅当任务原执行节点宕机时,才会触发任务故障转移到其他健康节点,不会随新实例加入自动迁移。

1. 代码方式配置示例

Config hazelcastConfig = new Config();
// 获取你定义的调度器对应的配置
ScheduledExecutorConfig executorConfig = hazelcastConfig.getScheduledExecutorConfig("myScheduledExecutor");
// 核心配置:禁止分区重平衡时迁移待执行任务
executorConfig.setMigrateDeferredTasks(false);
// 可选配置:设置任务备份数,建议至少设为1,保证原节点宕机时任务不丢失
executorConfig.setDurability(1);
// 后续正常初始化HazelcastInstance即可
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(hazelcastConfig);

2. YAML配置文件示例(适用于配置文件声明参数的场景)

hazelcast:
  scheduled-executor-service:
    myScheduledExecutor:
      migrate-deferred-tasks: false
      durability: 1
原有代码适配

你现有的调度代码无需修改,TaskUtils.named装饰器+捕获DuplicateTaskException的逻辑已经可以保证集群内仅存在一个同名任务,配合上述配置即可完全满足需求:

  • 任务始终在初始调度的节点执行
  • 仅原节点宕机时,任务才会自动迁移到其他健康节点继续按原有周期执行
  • 新实例加入集群不会触发任务迁移,不会打破原有调度周期(比如6小时执行一次的任务不会因为新节点加入而重置计时)

内容的提问来源于stack exchange,提问作者Cosmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:54:03