--- title: "清扫器分页大小配置" date: 2026-02-06 lastmod: 2026-02-06 description: "jobscheduler.sweeper.page_size 配置项用于控制作业清扫器搜索时的分页大小。" tags: ["作业调度", "分页查询", "性能优化", "内存管理"] summary: "配置项作用 # 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 个文档 │ ↓ 处理文档 ." --- ## 配置项作用 `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 ``` ## 配置建议 ## 生产环境(默认) ```yaml jobscheduler: sweeper: page_size: 100 # 默认值 ``` **建议**: 保持默认值 `100`。适用于大多数场景。 ## 大规模集群 ```yaml jobscheduler: sweeper: page_size: 500 # 增加分页大小 ``` **建议**: 增加到 `500-1000`。作业数量多、网络带宽充足时使用。 ## 内存受限环境 ```yaml jobscheduler: sweeper: page_size: 50 # 减少分页大小 ``` **建议**: 减少到 `50`。内存受限时使用。 ## 高性能环境 ```yaml jobscheduler: sweeper: page_size: 1000 # 更大分页大小 ``` **建议**: 增加到 `1000+`。网络带宽充足、内存充足时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml jobscheduler: sweeper: page_size: 100 ``` ## 大规模集群配置 ```yaml jobscheduler: sweeper: page_size: 500 period: 10m request_timeout: 30s ``` ## 内存受限配置 ```yaml jobscheduler: sweeper: page_size: 50 period: 5m request_timeout: 10s ``` ## 动态更新配置 ```json 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` 已废弃。