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

配置项作用 #

rollup.search.backoff_millis 配置项用于控制Rollup 搜索操作每次重试之间的等待时间

当 Rollup 搜索操作失败后,系统会等待此配置指定的时间后再进行下一次重试,用于避免过快重试导致系统压力过大。

配置项属性 #

  • 配置路径: rollup.search.backoff_millis
  • 数据类型: TimeValue(时间值)
  • 默认值: 1000ms(1 秒)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 是(可以动态更新,无需重启)
  • 废弃状态: 已废弃

配置项详解 #

工作机制 #

重试延迟机制

搜索请求 → 失败
    ↓
等待 backoff_millis
    ↓
重试 1 → 失败
    ↓
等待 backoff_millis
    ↓
重试 2 → 失败
    ↓
...
    ↓
重试 N → 成功 ✅ 或达到 backoff_count 次数

时间线示例 #

backoff_millis: 1000ms (1秒)

重试时间线:
时刻 0s:     尝试 1 → 失败
             ↓ 等待 1s
时刻 1s:     尝试 2 → 失败
             ↓ 等待 1s
时刻 2s:     尝试 3 → 失败
             ↓ 等待 1s
时刻 3s:     尝试 4 → 失败
             ↓ 等待 1s
时刻 4s:     尝试 5 → 失败
             ↓ 等待 1s
时刻 5s:     返回失败 ❌


总耗时: 5 秒


backoff_millis: 2000ms (2秒)

重试时间线:
时刻 0s:     尝试 1 → 失败
             ↓ 等待 2s
时刻 2s:     尝试 2 → 失败
             ↓ 等待 2s
时刻 4s:     尝试 3 → 失败
             ↓ 等待 2s
时刻 6s:     尝试 4 → 失败
             ↓ 等待 2s
时刻 8s:     尝试 5 → 失败
             ↓ 等待 2s
时刻 10s:    返回失败 ❌


总耗时: 10 秒

恒定退避策略 #

退避策略类型

恒定退避 (Constant Backoff):
├── 每次重试间隔相同
├── backoff_millis: 1000ms
├── 重试间隔: 1000ms → 1000ms → 1000ms → ...
└── 简单可预测


指数退避 (Exponential Backoff):
├── 每次重试间隔递增
├── 初始: 100ms
├── 重试间隔: 100ms → 200ms → 400ms → 800ms → ...
└── Rollup 不使用此策略


Rollup 使用恒定退避:
├── 易于配置
├── 行为可预测
├── 适合短暂故障
└── 配置简单

配置权衡 #

延迟时间选择

短延迟 (100-500ms):
├── 优点:
│   ├── 快速重试
│   ├── 失败响应快
│   └── 适合短暂故障
│
└── 缺点:
    ├── 可能过于频繁
    ├── 增加系统压力
    └── 可能无法恢复


中等延迟 (1000-2000ms) - 推荐:
├── 优点:
│   ├── 平衡重试速度
│   ├── 给系统恢复时间
│   └── 适合大多数场景
│
└── 缺点:
    └── 失败响应稍慢


长延迟 (3000-5000ms):
├── 优点:
│   ├── 减少系统压力
│   ├── 更长恢复时间
│   └── 适合严重故障
│
└── 缺点:
    ├── 失败响应慢
    ├── 用户体验差
    └── 可能浪费时间

配置建议 #

默认配置 #

rollup:
  search:
    backoff_millis: 1000  # 1秒(默认)
    backoff_count: 5

建议: 大多数场景使用默认值。

网络不稳定环境 #

rollup:
  search:
    backoff_millis: 2000  # 2秒
    backoff_count: 8

建议: 网络不稳定时增加延迟和重试次数。

快速恢复环境 #

rollup:
  search:
    backoff_millis: 500  # 0.5秒
    backoff_count: 3

建议: 网络稳定且需要快速响应时使用。

高延迟环境 #

rollup:
  search:
    backoff_millis: 3000  # 3秒
    backoff_count: 5

建议: 节点响应慢或负载高时使用。

动态更新 #

PUT /_cluster/settings
{
  "transient": {
    "rollup.search.backoff_millis": "2000ms"
  }
}

代码示例 #

基础配置 #

rollup:
  search:
    backoff_millis: 1000

时间值格式 #

rollup:
  search:
    backoff_millis: 1s      # 秒
    # 或
    backoff_millis: 1000    # 毫秒

完整重试配置 #

rollup:
  search:
    backoff_count: 5
    backoff_millis: 1000

快速重试 #

rollup:
  search:
    backoff_count: 3
    backoff_millis: 500ms

慢速重试 #

rollup:
  search:
    backoff_count: 5
    backoff_millis: 3000ms

相关配置 #

配置项作用默认值
search.backoff_millis重试延迟1000ms
search.backoff_count重试次数5
search.enabled搜索功能开关false

注意事项 #

  1. 默认值: 默认值为 1000ms(1 秒)。

  2. 动态更新: 支持动态更新,无需重启。

  3. 已废弃: 配置项已废弃,可能在未来版本移除。

  4. 总耗时: 总重试耗时约为 backoff_count × backoff_millis

  5. 合理设置: 根据网络状况和故障恢复时间设置。

  6. 时间格式: 支持毫秒和秒格式(如 10001s)。

  7. 配合使用: 应与 backoff_count 配合使用。

  8. 系统压力: 过短的延迟可能增加系统压力。

  9. 用户体验: 过长的延迟影响用户体验。

  10. 监控建议: 监控重试成功率和平均响应时间。

场景选择 #

场景选择指南

网络稳定 + 节点健康:
├── backoff_millis: 500ms
├── backoff_count: 3
└── 快速失败 ✅


网络一般 + 节点一般:
├── backoff_millis: 1000ms
├── backoff_count: 5
└── 默认配置 ✅


网络不稳定 + 节点负载高:
├── backoff_millis: 2000ms
├── backoff_count: 8
└── 增加重试 ✅


跨机房 / 跨区域:
├── backoff_millis: 3000ms
├── backoff_count: 5
└── 长延迟 ✅

故障排查 #

延迟配置问题排查

问题: 重试太慢

检查:
├── backoff_millis 设置
├── backoff_count 设置
└── 总耗时计算


解决:
├── 减少 backoff_millis
├── 减少 backoff_count
└── 优化网络/节点状态


问题: 重试仍然失败

检查:
├── 错误类型
├── 根本原因
└── 是否可重试


解决:
├── 修复根本问题
├── 增加延迟和次数
└── 考虑熔断机制


问题: 系统压力大

检查:
├── 重试频率
├── 并发请求数
└── 节点负载


解决:
├── 增加 backoff_millis
├── 减少 backoff_count
└── 限流控制