配置项作用 #
indices.breaker.type 配置项用于控制Easysearch 内存断路器的实现类型。
断路器是 Easysearch 重要的内存保护机制,用于防止内存使用超过限制导致系统崩溃。
配置项属性 #
- 配置路径:
indices.breaker.type - 数据类型:
String(字符串) - 默认值:
hierarchy - 有效值:
hierarchy,none - 是否可选: 是
- 作用域: NodeScope(节点级别)
配置项详解 #
工作机制 #
断路器类型选择
indices.breaker.type = hierarchy (默认):
│
↓
HierarchyCircuitBreakerService
│
├─── fielddata breaker
│ └── 字段数据和缓存
│
├─── request breaker
│ └── 单个请求内存
│
├─── accounting breaker
│ └── Lucene 段内存
│
├─── in_flight_requests breaker
│ └── 网络层内存
│
└─── parent breaker
└── 汇总所有断路器
内存保护 ✅
indices.breaker.type = none:
│
↓
NoneCircuitBreakerService
│
└── NoopCircuitBreaker (无操作)
无内存限制 ❌
Hierarchy 断路器结构 #
层次化断路器架构
总限制: 95% JVM 堆
│
├─── fielddata (40%)
│ └── 字段缓存、父子查询
│
├─── request (40%)
│ └── 聚合、排序等
│
├─── accounting (95%)
│ └── Lucene 段
│
└─── in_flight_requests (10%)
└── 网络读写
动态重分配:
某个 breaker 超限
↓
尝试从其他 breaker 借用配额
↓
保护系统不崩溃
断路器行为对比 #
Hierarchy 断路器:
内存使用监控
│
├──── fielddata breaker 超限
│ │
│ ↓
│ 尝试减少 fielddata
│ │
│ ↓
│ 请求被拒绝
│
└──── parent breaker 超限
│
↓
尝试重新分配
│
├──── 成功 ✅
│
└──── 失败 ❌
↓
系统保护
None 断路器:
内存使用监控
│
↓
无限制
│
↓
可能内存溢出 ❌
配置建议 #
生产环境(默认) #
indices:
breaker:
type: hierarchy # 默认值
建议: 保持默认值 hierarchy。提供内存保护。
开发/测试环境 #
indices:
breaker:
type: none # 禁用断路器
建议: 设置为 none。开发测试环境可以禁用。
故障排查场景 #
indices:
breaker:
type: none # 临时禁用
建议: 临时设置为 none。排查内存问题时使用。
调试内存问题 #
indices:
breaker:
type: hierarchy # 保持启用
建议: 保持启用。通过调整各断路器限制来调试。
代码示例 #
easysearch.yml 基础配置 #
indices:
breaker:
type: hierarchy
禁用断路器配置 #
indices:
breaker:
type: none
完整断路器配置 #
indices:
breaker:
type: hierarchy
fielddata:
limit: 40%
request:
limit: 40%
accounting:
limit: 95%
动态更新配置 #
PUT /_cluster/settings
{
"transient": {
"indices.breaker.type": "none"
}
}
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
indices.breaker.type | 断路器类型 | hierarchy |
indices.breaker.fielddata.limit | fielddata 断路器限制 | 40% |
indices.breaker.request.limit | request 断路器限制 | 40% |
indices.breaker.accounting.limit | accounting 断路器限制 | 100% |
断路器类型对比 #
| 类型 | 内存保护 | 性能开销 | 推荐场景 |
|---|---|---|---|
| hierarchy(默认) | 完善✅ | 较低 | 生产环境 |
| none | 无❌ | 无 | 开发/测试 |
使用场景 #
推荐使用 hierarchy 的场景 #
- 生产环境: 需要内存保护
- 资源受限: 内存有限的环境
- 大数据量: 处理大量数据
- 集群部署: 多节点集群
推荐使用 none 的场景 #
- 开发环境: 开发测试时禁用
- 内存充足: 内存非常充足
- 性能测试: 需要测试最大性能
- 故障排查: 排查内存问题时
子断路器说明 #
Hierarchy 断路器的子断路器
1. fielddata 断路器
跟踪: 字段数据、父子查询缓存
持久性: TRANSIENT(临时)
释放: 不活跃时释放
2. request 断路器
跟踪: 单个请求的内存
持久性: TRANSIENT(临时)
释放: 请求完成后释放
3. accounting 断路器
跟踪: Lucene 索引段
持久性: PERMANENT(持久)
释放: 只能删除索引
4. in_flight_requests 断路器
跟踪: 网络层读写
持久性: TRANSIENT(临时)
释放: 网络操作完成
5. parent 断路器
跟踪: 所有子断路器的总和
作用: 协调内存分配
注意事项 #
默认值: 默认值为
hierarchy,适用于大多数场景。生产环境: 生产环境强烈不建议使用
none。动态更新: 支持动态更新,但切换到
none需谨慎。内存保护:
hierarchy类型提供重要的内存保护机制。动态重分配: Hierarchy 支持断路器间的内存重分配。
性能影响:
hierarchy会带来轻微的性能开销。切换风险: 从
none切换到hierarchy需要重启节点。监控建议: 监控各断路器的内存使用情况。
配置验证: 切换类型后验证配置是否生效。
版本兼容: 不同版本的断路器实现可能不同。





