--- title: "Rollup 时间窗口配置" date: 2026-03-27 lastmod: 2026-03-27 description: "rollup.hours_before 配置项用于控制 Rollup 查询的时间边界。" tags: ["Rollup", "时间窗口", "查询优化"] summary: "配置项作用 # rollup.hours_before 配置项用于控制Rollup 查询的时间边界。 此配置决定了系统回溯多少小时的数据应该从原始索引查询,而不是从 Rollup 索引查询。这确保了最近的数据(还未被 Rollup 的数据)从原始索引查询,而较旧的数据从 Rollup 索引查询。 配置项属性 # 配置路径: rollup.hours_before 数据类型: Integer(整数值,小时) 默认值: 无明确默认(需根据 Rollup 任务配置) 是否可选: 是 作用域: ClusterScope(集群级别) 动态更新: 是(可以动态更新) 配置项详解 # 工作机制 # 时间边界计算 当前时间: 2026-02-04 10:00:00 hours_before: 24 计算边界: rollupEnd = now - 24 hours = 2026-02-03 10:00:00 查询范围划分: ├── 最近 24 小时 │ └── 查询: 原始索引 ✅ └── 24 小时以前 └── 查询: Rollup 索引 ✅ 查询优化: ├── 避免查询不存在 Rollup 的数据 ├── 减少查询错误 └── 提高性能 与 Rollup 任务配合 # Rollup 任务调度配置: 每小时 Rollup: hours_before: 2 │ ├── 最近 2 小时: 原始索引 └── 2 小时以前: Rollup 索引 每天 Rollup: hours_before: 48 │ ├── 最近 2 天: 原始索引 └── 2 天以前: Rollup 索引 每周 Rollup: hours_before: 168 (7天 × 24小时) │ ├── 最近 1 周: 原始索引 └── 1 周以前: Rollup 索引 配置建议 # 每日 Rollup # rollup: hours_before: 48 # 2天 建议: 每日 Rollup 任务使用 48 小时。" --- ## 配置项作用 `rollup.hours_before` 配置项用于控制**Rollup 查询的时间边界**。 此配置决定了系统回溯多少小时的数据应该从原始索引查询,而不是从 Rollup 索引查询。这确保了最近的数据(还未被 Rollup 的数据)从原始索引查询,而较旧的数据从 Rollup 索引查询。 ## 配置项属性 - **配置路径**: `rollup.hours_before` - **数据类型**: `Integer`(整数值,小时) - **默认值**: 无明确默认(需根据 Rollup 任务配置) - **是否可选**: 是 - **作用域**: ClusterScope(集群级别) - **动态更新**: 是(可以动态更新) ## 配置项详解 ## 工作机制 ``` 时间边界计算 当前时间: 2026-02-04 10:00:00 hours_before: 24 计算边界: rollupEnd = now - 24 hours = 2026-02-03 10:00:00 查询范围划分: ├── 最近 24 小时 │ └── 查询: 原始索引 ✅ └── 24 小时以前 └── 查询: Rollup 索引 ✅ 查询优化: ├── 避免查询不存在 Rollup 的数据 ├── 减少查询错误 └── 提高性能 ``` ## 与 Rollup 任务配合 ``` Rollup 任务调度配置: 每小时 Rollup: hours_before: 2 │ ├── 最近 2 小时: 原始索引 └── 2 小时以前: Rollup 索引 每天 Rollup: hours_before: 48 │ ├── 最近 2 天: 原始索引 └── 2 天以前: Rollup 索引 每周 Rollup: hours_before: 168 (7天 × 24小时) │ ├── 最近 1 周: 原始索引 └── 1 周以前: Rollup 索引 ``` ## 配置建议 ## 每日 Rollup ```yaml rollup: hours_before: 48 # 2天 ``` **建议**: 每日 Rollup 任务使用 48 小时。 ## 每周 Rollup ```yaml rollup: hours_before: 168 # 7天 ``` **建议**: 每周 Rollup 任务使用 168 小时。 ## 每小时 Rollup ```yaml rollup: hours_before: 2 # 2小时 ``` **建议**: 每小时 Rollup 任务使用 2 小时。 ## 动态更新 ```json PUT /_cluster/settings { "transient": { "rollup.hours_before": 72 } } ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `hours_before` | 时间边界 | - | | `max_docs` | 最大文档数 | 20000000 | ## 注意事项 1. **配置同步**: 应与 Rollup 任务调度保持一致。 2. **动态更新**: 可以动态更新。 3. **查询分割**: 系统自动分割查询。 4. **性能优化**: 避免查询不存在 Rollup 的数据。 5. **数据一致性**: 确保时间边界正确。 6. **监控建议**: 监控查询性能。 7. **测试验证**: 调整后应验证查询结果。