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

配置项作用 #

index_state_management.coordinator.backoff_millis 配置项用于控制索引状态管理(ISM)协调器在操作失败后重试之前的等待时间

当协调器执行批量操作失败时(如遇到 429 Too Many Requests 错误),系统会等待此配置指定的时间后进行重试。

配置项属性 #

  • 配置路径: index_state_management.coordinator.backoff_millis
  • 数据类型: TimeValue(时间值)
  • 默认值: 50ms(50毫秒)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 是(支持动态更新)

配置项详解 #

工作机制 #

重试间隔时间流程

操作执行失败 ❌
    │
    ↓
检查 backoff_count > 0
    │
    ↓ yes
等待 backoff_millis
    │
    ↓
重新执行操作
    │
    ├─────── 成功 ✅ ──→ 完成
    │
    └─────── 失败 ❌
                  ↓
             backoff_count - 1
                  │
                  ↓
             检查是否还有重试次数
                  │
                  ├──── yes ──→ 继续等待 backoff_millis
                  │
                  └──── no ──→ 放弃重试

恒定退避策略 #

Constant Backoff 时序图

backoff_count = 3
backoff_millis = 100ms

尝试1 ──→ 失败 ──→ [等待 100ms] ──→ 尝试2
                                    │
                                    ↓
                                  失败 ──→ [等待 100ms] ──→ 尝试3
                                                      │
                                                      ↓
                                                    失败 ──→ [等待 100ms] ──→ 尝试4
                                                                          │
                                                                          ↓
                                                                        失败 ──→ 放弃

总重试时间: 3 × 100ms = 300ms

批量操作中的应用 #

批量操作重试场景

批量更新索引元数据
    │
    ↓
BulkRequest
    │
    ↓
429 Too Many Requests ❌
    │
    ↓
等待 backoff_millis (50ms)
    │
    ↓
重新发送 BulkRequest
    │
    ├─────── 成功 ✅ ──→ 元数据更新完成
    │
    └─────── 仍然 429 ──→ 继续重试

配置建议 #

生产环境(默认) #

index_state_management:
  coordinator:
    backoff_millis: 50ms  # 默认值
    backoff_count: 0

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

高负载环境 #

index_state_management:
  coordinator:
    backoff_millis: 200ms  # 增加等待时间
    backoff_count: 3

建议: 增加到 100-200ms。集群负载较高时使用。

快速恢复场景 #

index_state_management:
  coordinator:
    backoff_millis: 20ms  # 减少等待时间
    backoff_count: 5

建议: 减少到 20-30ms。需要快速重试时使用。

不稳定网络 #

index_state_management:
  coordinator:
    backoff_millis: 150ms
    backoff_count: 5

建议: 增加到 100-200ms。网络不稳定时使用。

代码示例 #

easysearch.yml 基础配置 #

index_state_management:
  coordinator:
    backoff_millis: 50ms

启用重试配置 #

index_state_management:
  coordinator:
    backoff_millis: 100ms
    backoff_count: 3

高负载配置 #

index_state_management:
  coordinator:
    backoff_millis: 200ms
    backoff_count: 5

动态更新配置 #

PUT /_cluster/settings
{
  "transient": {
    "index_state_management.coordinator.backoff_millis": "100ms"
  }
}

相关配置 #

配置项作用默认值
index_state_management.coordinator.backoff_millis重试间隔(毫秒)50ms
index_state_management.coordinator.backoff_count重试次数0

总重试时间计算 #

总重试时间估算

总时间 ≈ backoff_count × backoff_millis

配置示例:

1. backoff_count = 0, backoff_millis = 50
   总时间 = 0(不重试)

2. backoff_count = 3, backoff_millis = 50
   总时间 ≈ 3 × 50ms = 150ms

3. backoff_count = 5, backoff_millis = 100
   总时间 ≈ 5 × 100ms = 500ms

4. backoff_count = 8, backoff_millis = 200
   总时间 ≈ 8 × 200ms = 1600ms = 1.6s

使用场景 #

推荐使用默认值的场景 #

  • 标准环境: 集群负载正常
  • 快速恢复: 需要快速完成重试
  • 默认重试: 配合非零的 backoff_count 使用

推荐增加间隔的场景 #

  • 高负载集群: 给集群更多恢复时间
  • 频繁限流: 经常遇到 429 错误
  • 资源竞争: 多个操作竞争资源

推荐减少间隔的场景 #

  • 低延迟要求: 需要尽快完成操作
  • 高性能集群: 集群资源充足
  • 快速失败: 希望快速知道最终结果

常见错误处理 #

可重试的错误类型

1. 429 Too Many Requests
   └── 集群过载,需要等待
   └── backoff_millis 给集群恢复时间

2. 503 Service Unavailable
   └── 节点暂时不可用
   └── 重试可能成功

3. 网络异常
   └── 连接超时、网络中断
   └── 等待后网络可能恢复

4. 资源锁定
   └── 索引被其他操作锁定
   └── 等待后锁可能释放

性能影响分析 #

backoff_millis 设置优点缺点
20ms快速重试可能仍然过载
50ms(默认)平衡速度和恢复标准设置
100ms给集群更多恢复时间总耗时较长
200ms显著减轻集群压力操作延迟明显

与重试次数的配合 #

配置组合建议

场景 1: 轻微过载
backoff_millis: 50ms
backoff_count: 3
总耗时: ~150ms


场景 2: 中度过载
backoff_millis: 100ms
backoff_count: 5
总耗时: ~500ms


场景 3: 严重过载
backoff_millis: 200ms
backoff_count: 8
总耗时: ~1.6s

注意事项 #

  1. 默认值: 默认值为 50ms,是一个合理的折中值。

  2. 与 backoff_count 配合: 两个配置需要同时考虑。

  3. 恒定策略: 使用恒定退避,每次重试等待相同时间。

  4. 动态更新: 支持动态更新,修改后立即生效。

  5. 总耗时: backoff_count × backoff_millis 约为总重试时间。

  6. 适用操作: 主要用于批量元数据操作。

  7. 429 错误: 最常见的重试场景是集群限流。

  8. 资源考虑: 重试会消耗额外资源。

  9. 监控建议: 监控重试成功率,评估配置效果。

  10. 版本兼容: 此配置在新旧版本中一致。