配置项作用 #
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
注意事项 #
默认值: 默认值为
50ms,是一个合理的折中值。与 backoff_count 配合: 两个配置需要同时考虑。
恒定策略: 使用恒定退避,每次重试等待相同时间。
动态更新: 支持动态更新,修改后立即生效。
总耗时:
backoff_count × backoff_millis约为总重试时间。适用操作: 主要用于批量元数据操作。
429 错误: 最常见的重试场景是集群限流。
资源考虑: 重试会消耗额外资源。
监控建议: 监控重试成功率,评估配置效果。
版本兼容: 此配置在新旧版本中一致。





