📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

jobscheduler.sweeper.period 配置项用于控制作业清扫器(Job Sweeper)后台清理任务的执行间隔

清扫器负责定期扫描所有作业索引,同步作业状态,确保作业调度的准确性。当集群状态发生变化时,清扫任务会重新同步作业信息,保证调度器与实际作业文档状态一致。

配置项属性 #

  • 配置路径: jobscheduler.sweeper.period
  • 旧版路径: org.easysearch.jobscheduler.sweeper.period(已废弃)
  • 数据类型: TimeValue(时间值)
  • 默认值: 5m(5分钟)
  • 最小值: 必须大于 0
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 是(支持动态更新)

配置项详解 #

工作机制 #

清扫器定时任务

period = 5m (默认):

00:00 ──→ 触发清扫 1
         ├── 扫描作业索引
         ├── 同步作业状态
         ├── 重新调度作业
         └── 完成清理
00:05 ──→ 触发清扫 2
00:10 ──→ 触发清扫 3
00:15 ──→ 触发清扫 4
...

每个周期结束时触发下一次清扫

清扫器职责 #

Job Sweeper 的主要功能

1. 全量扫描
   ├── 扫描所有作业索引
   ├── 获取所有作业文档
   └── 分页处理(使用 page_size)

2. 状态同步
   ├── 对比调度器状态和索引状态
   ├── 发现新增作业
   ├── 发现已删除作业
   └── 发现已修改作业

3. 重新调度
   ├── 新增作业 → 添加到调度队列
   ├── 修改作业 → 更新调度计划
   └── 删除作业 → 从调度队列移除

4. 集群变化响应
   ├── 监听集群状态变化
   ├── 触发增量清扫
   └── 确保调度一致性

定时任务创建 #

后台任务初始化

scheduledWithFixedDelay:
├── initialDelay: period
├── delay: period
├── task: sweepTask
└── threadPool: SAME

执行逻辑:
上一次清扫完成 ──→ 等待 period ──→ 下一次清扫开始
                           ↑
                           │
                    固定延迟执行

配置建议 #

生产环境(默认) #

jobscheduler:
  sweeper:
    period: 5m  # 默认值

建议: 保持默认值 5m。平衡及时性和资源消耗。

高负载环境 #

jobscheduler:
  sweeper:
    period: 10m  # 增加周期

建议: 增加到 10-15m。集群负载高时使用,减少清扫频率。

快速同步需求 #

jobscheduler:
  sweeper:
    period: 1m  # 减少周期

建议: 减少到 1-2m。需要快速同步作业状态时使用。

大规模集群 #

jobscheduler:
  sweeper:
    period: 10m
    page_size: 500

建议: 增加周期到 10m,同时增加分页大小。

代码示例 #

easysearch.yml 基础配置 #

jobscheduler:
  sweeper:
    period: 5m

高负载配置 #

jobscheduler:
  sweeper:
    period: 10m
    page_size: 200
  request_timeout: 30s

快速同步配置 #

jobscheduler:
  sweeper:
    period: 1m
    page_size: 50
  request_timeout: 10s

动态更新配置 #

PUT /_cluster/settings
{
  "transient": {
    "jobscheduler.sweeper.period": "10m"
  }
}

相关配置 #

配置项作用默认值
jobscheduler.sweeper.period清扫周期5m
jobscheduler.sweeper.page_size分页大小100
jobscheduler.request_timeout请求超时时间10s
jobscheduler.sweeper.backoff_millis退避延迟时间50ms

性能影响分析 #

period 设置优点缺点
1m快速同步CPU 使用率高
2-3m较快同步中等 CPU 使用
5m(默认)平衡及时性和资源标准设置
10m+CPU 使用率低同步延迟大

资源消耗对比 #

假设每次清扫耗时 30 秒

period = 1m:
每小时清扫次数: 60 / 1 = 60 次
每小时清扫耗时: 60 × 30s = 30 分钟
CPU 使用率: 50% ❌


period = 5m (默认):
每小时清扫次数: 60 / 5 = 12 次
每小时清扫耗时: 12 × 30s = 6 分钟
CPU 使用率: 10% ✅


period = 10m:
每小时清扫次数: 60 / 10 = 6 次
每小时清扫耗时: 6 × 30s = 3 分钟
CPU 使用率: 5% ✅

使用场景 #

推荐使用默认值的场景 #

  • 标准环境: 集群规模适中,作业数量中等
  • 平衡需求: 平衡及时性和资源消耗
  • 常规业务: 作业变化频率不高

推荐增加周期的场景 #

  • 高负载环境: 集群 CPU 使用率高
  • 大规模集群: 作业数量很多(数万)
  • 稳定业务: 作业变化频率低
  • 资源受限: 节点资源紧张

推荐减少周期的场景 #

  • 快速同步: 需要快速同步作业状态
  • 频繁变更: 作业频繁创建/修改/删除
  • 低负载环境: 集群负载很低
  • 关键任务: 作业调度非常关键

与分页大小的配合 #

period 和 page_size 的协同

配置 1: 标准配置
period: 5m
page_size: 100
└── 每 5 分钟扫描一次,每次 100 条


配置 2: 大规模优化
period: 10m
page_size: 500
└── 减少扫描频率,增加每次扫描量


配置 3: 快速同步
period: 1m
page_size: 50
└── 增加扫描频率,减少每次扫描量

集群状态变化响应 #

清扫器的响应机制

正常清扫:
├── 按照周期定期执行
├── 全量扫描作业索引
└── 同步所有作业状态


集群状态变化:
├── 检测到集群变化
├── 立即触发增量清扫
├── 只扫描受影响的分片
└── 快速恢复调度一致性


周期清扫 + 增量清扫:
├── 周期清扫保证最终一致性
└── 增量清扫保证快速响应

动态更新影响 #

配置更新的影响

period: 5m → 10m

当前正在进行的清扫:
└── 继续执行,完成后等待 10m


已计划的清扫:
└── 取消原计划,按新周期执行


下一次清扫:
└── 等待 10m 后执行 ✅

注意事项 #

  1. 默认值: 默认值为 5m,适用于大多数场景。

  2. 时间格式: 支持 1m5m1h 等时间格式。

  3. 动态更新: 支持动态更新,修改后立即生效。

  4. 固定延迟: 使用 scheduleWithFixedDelay,上一次完成后等待固定时间。

  5. 资源消耗: 周期越短,CPU 和内存消耗越大。

  6. 同步延迟: 周期越长,作业状态同步延迟越大。

  7. 与规模配合: 大规模集群应增加周期。

  8. 与分页配合: 增加周期可同时增加分页大小。

  9. 监控建议: 监控清扫耗时和资源使用。

  10. 测试验证: 配置变更后应验证清扫效果。

索引管理模块的类似配置 #

其他模块的类似配置

索引生命周期管理 (ILM):
index_lifecycle_management.coordinator.sweep_period: 5m


索引状态管理 (ISM):
index_state_management.coordinator.sweep_period: 5m


作业调度器:
jobscheduler.sweeper.period: 5m


这些配置的作用类似,
都是控制后台清扫任务的执行周期。