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

配置项作用 #

jobscheduler.sweeper.page_size 配置项用于控制作业清扫器(Job Sweeper)在扫描作业索引时每次搜索请求获取的文档数量

清扫器负责定期扫描作业索引,确保调度的作业与集群状态同步。此配置决定了每次搜索请求返回的文档数量,影响清扫器的内存使用和网络开销。

配置项属性 #

  • 配置路径: jobscheduler.sweeper.page_size
  • 旧版路径: org.easysearch.jobscheduler.sweeper.page_size(已废弃)
  • 数据类型: Integer(整数)
  • 默认值: 100
  • 最小值: 无明确限制(受 Integer 类型约束)
  • 最大值: 无明确限制(受 Integer 类型约束)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 是(支持动态更新)

配置项详解 #

工作机制 #

分页扫描流程

假设有 1000 个作业文档

page_size = 100:

第 1 页: 文档 1-100
    │
    ↓ 搜索请求
返回 100 个文档
    │
    ↓ 处理文档
第 2 页: 文档 101-200
    │
    ↓ 搜索请求
返回 100 个文档
    │
    ↓ 处理文档
...
第 10 页: 文档 901-1000

总共: 10 次搜索请求


page_size = 500:

第 1 页: 文档 1-500
    │
    ↓ 搜索请求
返回 500 个文档
    │
    ↓ 处理文档
第 2 页: 文档 501-1000

总共: 2 次搜索请求

内存使用分析 #

内存占用对比

假设每个文档约 1KB

page_size = 100:
每页内存: 100 × 1KB = 100 KB
峰值内存: ~100 KB ✅


page_size = 500:
每页内存: 500 × 1KB = 500 KB
峰值内存: ~500 KB


page_size = 1000:
每页内存: 1000 × 1KB = 1 MB
峰值内存: ~1 MB

网络开销分析 #

网络请求次数对比

假设有 1000 个作业文档

page_size = 100:
请求次数: 1000 / 100 = 10 次
每次开销: 1ms (网络延迟)
总开销: 10 × 1ms = 10ms


page_size = 500:
请求次数: 1000 / 500 = 2 次
每次开销: 2ms (数据量大,延迟稍高)
总开销: 2 × 2ms = 4ms ✅


page_size = 1000:
请求次数: 1000 / 1000 = 1 次
每次开销: 5ms (数据更大,延迟更高)
总开销: 1 × 5ms = 5ms

配置建议 #

生产环境(默认) #

jobscheduler:
  sweeper:
    page_size: 100  # 默认值

建议: 保持默认值 100。适用于大多数场景。

大规模集群 #

jobscheduler:
  sweeper:
    page_size: 500  # 增加分页大小

建议: 增加到 500-1000。作业数量多、网络带宽充足时使用。

内存受限环境 #

jobscheduler:
  sweeper:
    page_size: 50  # 减少分页大小

建议: 减少到 50。内存受限时使用。

高性能环境 #

jobscheduler:
  sweeper:
    page_size: 1000  # 更大分页大小

建议: 增加到 1000+。网络带宽充足、内存充足时使用。

代码示例 #

easysearch.yml 基础配置 #

jobscheduler:
  sweeper:
    page_size: 100

大规模集群配置 #

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

内存受限配置 #

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

动态更新配置 #

PUT /_cluster/settings
{
  "transient": {
    "jobscheduler.sweeper.page_size": 200
  }
}

相关配置 #

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

性能影响分析 #

page_size 设置优点缺点
50内存占用小请求次数多
100(默认)平衡内存和性能标准设置
500请求次数少内存占用大
1000+请求次数最少内存占用很大

扫描时间估算 #

假设有 10000 个作业文档

page_size = 50:
请求次数: 10000 / 50 = 200 次
每次耗时: 10ms (网络) + 5ms (处理)
总耗时: 200 × 15ms = 3 秒


page_size = 100 (默认):
请求次数: 10000 / 100 = 100 次
每次耗时: 12ms + 8ms
总耗时: 100 × 20ms = 2 秒


page_size = 500:
请求次数: 10000 / 500 = 20 次
每次耗时: 30ms + 40ms
总耗时: 20 × 70ms = 1.4 秒


page_size = 1000:
请求次数: 10000 / 1000 = 10 次
每次耗时: 50ms + 100ms
总耗时: 10 × 150ms = 1.5 秒

使用场景 #

推荐使用默认值的场景 #

  • 标准环境: 作业数量适中(数千个)
  • 平衡需求: 平衡内存使用和性能
  • 常规硬件: 标准服务器配置

推荐增加分页大小的场景 #

  • 大量作业: 作业数量很多(数万个)
  • 高带宽: 网络带宽充足
  • 充足内存: 节点内存充足
  • 减少请求: 希望减少网络请求次数

推荐减少分页大小的场景 #

  • 内存受限: 节点内存紧张
  • 小规模作业: 作业数量很少(数百个)
  • 低带宽: 网络带宽有限
  • 稳定性优先: 优先考虑稳定性

与超时配置的配合 #

page_size 和 request_timeout 的协同

配置 1: 标准配置
page_size: 100
request_timeout: 10s
└── 每页在 10s 内完成


配置 2: 大分页配置
page_size: 500
request_timeout: 30s
└── 增加分页同时增加超时 ✅


配置 3: 小分页配置
page_size: 50
request_timeout: 10s
└── 小分页使用默认超时即可

搜索请求示例 #

清扫器搜索请求结构

SearchRequest {
  "indices": [".jobscheduler-*"],
  "source": {
    "size": page_size,  // 使用配置的分页大小
    "query": {
      "match_all": {}
    },
    "sort": [
      {"job_schedule_time": "asc"}
    ]
  }
}


page_size = 100:
每次搜索返回最多 100 个作业文档


page_size = 500:
每次搜索返回最多 500 个作业文档

动态更新影响 #

配置更新的影响

page_size: 100 → 200

当前正在进行的清扫:
└── 继续使用旧的 page_size (100)


下一次清扫:
└── 使用新的 page_size (200) ✅


已完成的清扫:
└── 不受影响


计划中的清扫:
└── 使用新的 page_size (200)

注意事项 #

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

  2. 内存影响: 分页大小越大,每次搜索占用内存越多。

  3. 网络影响: 分页大小越大,单次请求数据量越大。

  4. 请求次数: 分页大小越大,总请求次数越少。

  5. 动态更新: 支持动态更新,下次清扫时生效。

  6. 与超时配合: 增加分页大小应考虑增加超时时间。

  7. 作业数量: 应根据作业数量调整分页大小。

  8. 监控建议: 监控清扫耗时和内存使用。

  9. 测试验证: 配置变更后应验证清扫性能。

  10. 旧版废弃: org.easysearch.jobscheduler.sweeper.page_size 已废弃。