--- title: "Rollup 搜索重试次数配置" date: 2026-03-21 lastmod: 2026-03-21 description: "rollup.search.backoff_count 配置项用于控制 Rollup 搜索操作失败时的重试次数。" tags: ["Rollup", "搜索", "重试机制"] summary: "配置项作用 # rollup.search.backoff_count 配置项用于控制Rollup 搜索操作失败时的最大重试次数。 当 Rollup 搜索操作因网络问题、节点不可用或其他临时性错误失败时,系统会根据此配置的值决定最多重试多少次。 配置项属性 # 配置路径: rollup.search.backoff_count 数据类型: Integer(整数) 默认值: 5 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 是(可以动态更新,无需重启) 废弃状态: 已废弃 配置项详解 # 工作机制 # 重试机制流程 Rollup 搜索请求: ├── 执行搜索 ├── 成功? │ ├── 是 → 返回结果 ✅ │ └── 否 → 继续 ├── 重试次数 < backoff_count? │ ├── 是 → 等待 backoff_millis │ │ └── 重试 │ └── 否 → 返回失败 ❌ 重试策略 # 恒定退避策略 backoff_count: 5 backoff_millis: 1000ms 重试时间线: 尝试 1: 0ms → 失败 ↓ 等待 1000ms 尝试 2: 1000ms → 失败 ↓ 等待 1000ms 尝试 3: 2000ms → 失败 ↓ 等待 1000ms 尝试 4: 3000ms → 失败 ↓ 等待 1000ms 尝试 5: 4000ms → 失败 ↓ 等待 1000ms 尝试 6: 5000ms → 超过 backoff_count ↓ 返回失败 ❌ 总耗时: 约 5 秒 错误场景处理 # 可重试的错误: 1." --- ## 配置项作用 `rollup.search.backoff_count` 配置项用于控制**Rollup 搜索操作失败时的最大重试次数**。 当 Rollup 搜索操作因网络问题、节点不可用或其他临时性错误失败时,系统会根据此配置的值决定最多重试多少次。 ## 配置项属性 - **配置路径**: `rollup.search.backoff_count` - **数据类型**: `Integer`(整数) - **默认值**: `5` - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: 是(可以动态更新,无需重启) - **废弃状态**: 已废弃 ## 配置项详解 ## 工作机制 ``` 重试机制流程 Rollup 搜索请求: ├── 执行搜索 ├── 成功? │ ├── 是 → 返回结果 ✅ │ └── 否 → 继续 ├── 重试次数 < backoff_count? │ ├── 是 → 等待 backoff_millis │ │ └── 重试 │ └── 否 → 返回失败 ❌ ``` ## 重试策略 ``` 恒定退避策略 backoff_count: 5 backoff_millis: 1000ms 重试时间线: 尝试 1: 0ms → 失败 ↓ 等待 1000ms 尝试 2: 1000ms → 失败 ↓ 等待 1000ms 尝试 3: 2000ms → 失败 ↓ 等待 1000ms 尝试 4: 3000ms → 失败 ↓ 等待 1000ms 尝试 5: 4000ms → 失败 ↓ 等待 1000ms 尝试 6: 5000ms → 超过 backoff_count ↓ 返回失败 ❌ 总耗时: 约 5 秒 ``` ## 错误场景处理 ``` 可重试的错误: 1. 网络问题 ├── 连接超时 ├── 网络中断 └── 节点不可用 2. 临时错误 ├── 节点重启中 ├── 负载过高 └── 临时性故障 3. 搜索超时 ├── 响应超时 ├── 查询执行超时 └── 节点响应慢 不适合重试的错误: 1. 查询语法错误 ❌ 2. 字段不存在 ❌ 3. 权限不足 ❌ 4. 索引不存在 ❌ ``` ## 代码实现 ```kotlin // 初始化退避策略 @Volatile private var retrySearchPolicy = BackoffPolicy.constantBackoff( ROLLUP_SEARCH_BACKOFF_MILLIS.get(settings), ROLLUP_SEARCH_BACKOFF_COUNT.get(settings) ) // 动态更新支持 init { clusterService.clusterSettings.addSettingsUpdateConsumer( ROLLUP_SEARCH_BACKOFF_MILLIS, ROLLUP_SEARCH_BACKOFF_COUNT ) { millis, count -> retrySearchPolicy = BackoffPolicy.constantBackoff(millis, count) } } // 执行搜索时使用重试 fun executeCompositeSearch(request: SearchRequest): SearchResponse { return retrySearchPolicy.retry { // 执行实际的搜索操作 doSearch(request) } } ``` ## 配置建议 ## 默认配置 ```yaml rollup: search: backoff_count: 5 # 默认值 backoff_millis: 1000 ``` **建议**: 大多数场景使用默认值。 ## 网络不稳定环境 ```yaml rollup: search: backoff_count: 10 # 增加重试次数 backoff_millis: 2000 ``` **建议**: 网络不稳定时增加重试次数和延迟。 ## 高可用环境 ```yaml rollup: search: backoff_count: 3 # 减少重试次数 backoff_millis: 500 ``` **建议**: 网络稳定时可减少重试,加快失败响应。 ## 快速失败 ```yaml rollup: search: backoff_count: 1 # 只重试一次 backoff_millis: 500 ``` **建议**: 需要快速响应时使用。 ## 动态更新 ```json PUT /_cluster/settings { "transient": { "rollup.search.backoff_count": 8 } } ``` ## 代码示例 ## 基础配置 ```yaml rollup: search: backoff_count: 5 ``` ## 完整重试配置 ```yaml rollup: search: backoff_count: 5 backoff_millis: 1000 ``` ## 高重试配置 ```yaml rollup: search: backoff_count: 10 backoff_millis: 2000 ``` ## 低延迟配置 ```yaml rollup: search: backoff_count: 3 backoff_millis: 500 ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `search.backoff_count` | 重试次数 | 5 | | `search.backoff_millis` | 重试延迟 | 1000ms | | `search.enabled` | 搜索功能开关 | false | ## 注意事项 1. **默认值**: 默认值为 `5` 次。 2. **动态更新**: 支持动态更新,无需重启。 3. **已废弃**: 配置项已废弃,可能在未来版本移除。 4. **恒定退避**: 使用恒定退避策略,每次重试间隔相同。 5. **总耗时**: 总重试耗时约为 `backoff_count × backoff_millis`。 6. **合理设置**: 过多重试会延长失败响应时间。 7. **错误类型**: 只对可重试的错误进行重试。 8. **配合使用**: 应与 `backoff_millis` 配合使用。 9. **监控建议**: 监控重试次数和成功率。 10. **网络环境**: 根据网络稳定性调整配置。 ## 故障排查 ``` 重试失败排查 问题: 搜索频繁重试 排查: ├── 检查网络连接 ├── 检查节点状态 ├── 检查负载情况 └── 检查错误日志 解决: ├── 增加 backoff_count ├── 增加 backoff_millis ├── 修复网络问题 └── 优化集群状态 问题: 重试浪费时间 排查: ├── 检查错误类型 ├── 检查是否可重试 └── 检查配置是否合理 解决: ├── 减少 backoff_count ├── 减少 backoff_millis ├── 修复根本原因 └── 使用快速失败模式 ```