当前位置: 首页 > news >正文

Elasticsearch Circuit Breaker 全面解析与最佳实践

一、Circuit Breaker 简介

Elasticsearch 是基于 JVM 的搜索引擎,其内存管理十分重要。为了避免单个操作或查询耗费过多内存导致节点不可用,Elasticsearch 引入了 Circuit Breaker(熔断器)机制。当内存使用达到熔断器预设阈值时,相应操作会立即被中止,并返回明确的错误信息。

注意:
Circuit Breaker 并不能完全跟踪 Elasticsearch 所有内存使用情况,因此并不能提供 100% 完整的内存保护。

二、Elasticsearch 中的 Circuit Breaker 类型与配置

Elasticsearch 提供了多个类型的熔断器,以限制不同场景的内存使用:

1. 父级熔断器(Parent Circuit Breaker)

父级熔断器用于控制整体内存使用,设定所有子熔断器的整体上限:

  • indices.breaker.total.use_real_memory(静态)
    是否使用真实内存,默认为 true

  • indices.breaker.total.limit(动态)
    总体熔断器内存上限:

    • use_real_memory=false,默认值为 JVM Heap 的 70%;
    • use_real_memory=true,默认值为 JVM Heap 的 95%。

推荐配置:

PUT _cluster/settings
{"persistent": {"indices.breaker.total.limit": "90%"}
}

2. Field Data 熔断器

控制字段数据缓存加载时的内存使用:

  • indices.breaker.fielddata.limit(动态)
    默认为 JVM Heap 的 40%。

  • indices.breaker.fielddata.overhead(动态)
    内存预估系数,默认为 1.03

推荐配置(默认即可):

PUT _cluster/settings
{"persistent": {"indices.breaker.fielddata.limit": "40%","indices.breaker.fielddata.overhead": 1.03}
}

3. 请求熔断器(Request Circuit Breaker)

用于控制单个请求期间数据结构内存:

  • indices.breaker.request.limit(动态)
    默认 JVM Heap 的 60%。

  • indices.breaker.request.overhead(动态)
    默认 1

推荐配置:

PUT _cluster/settings
{"persistent": {"indices.breaker.request.limit": "60%"}
}

4. 在途请求熔断器(In-flight Requests Circuit Breaker)

限制传输层与 HTTP 请求的内存使用:

  • network.breaker.inflight_requests.limit(动态)
    默认为 JVM Heap 的 100%。

  • network.breaker.inflight_requests.overhead(动态)
    默认系数为 2

推荐配置:

PUT _cluster/settings
{"persistent": {"network.breaker.inflight_requests.limit": "90%","network.breaker.inflight_requests.overhead": 2}
}

5. 脚本编译熔断器(Script Compilation Circuit Breaker)

限制单位时间内内联脚本的编译数量:

  • script.max_compilations_rate(动态)
    默认每 5 分钟 150 次。

当脚本缓存频繁淘汰(cache_evictions)时,应扩大脚本缓存:

PUT _cluster/settings
{"persistent": {"script.cache.max_size": "2000"}
}

6. 正则表达式熔断器(Regex Circuit Breaker)

限制 Painless 脚本中正则表达式的复杂性:

  • script.painless.regex.enabled(静态)
    可选值:

    • limited(默认):启用,但限制复杂度。
    • true:完全启用,无复杂度限制。
    • false:禁用正则。
  • script.painless.regex.limit-factor(静态)
    默认值为 6,表示脚本输入长度的倍数作为最大匹配长度限制。

推荐配置:

script.painless.regex.enabled: limited
script.painless.regex.limit-factor: 6

7. EQL 查询熔断器(EQL Circuit Breaker)

针对序列查询的内存控制:

  • breaker.eql_sequence.limit(动态)
    默认 JVM Heap 的 50%。

  • breaker.eql_sequence.overhead(动态)
    默认为 1

  • breaker.eql_sequence.type(静态)
    熔断器类型:

    • memory(默认):启用。
    • noop:禁用。

推荐配置:

PUT _cluster/settings
{"persistent": {"breaker.eql_sequence.limit": "40%","breaker.eql_sequence.overhead": 1}
}

8. 机器学习熔断器(Machine Learning Circuit Breaker)

控制机器学习模型推理的内存使用:

  • breaker.model_inference.limit(动态)
    默认 JVM Heap 的 50%。

  • breaker.model_inference.overhead(动态)
    默认 1

  • breaker.model_inference.type(静态)
    熔断器类型:

    • memory(默认):启用。
    • noop:禁用。

推荐配置(默认即可):

PUT _cluster/settings
{"persistent": {"breaker.model_inference.limit": "50%"}
}

三、最佳实践和建议

  • 避免设置过高
    熔断器的阈值设置过高,可能导致节点 OOM 崩溃。

  • 合理分配熔断器比例
    父级熔断器一般不超过 JVM Heap 的 90%。各子熔断器在此基础上再进行分配。

  • 动态调整与监控
    Elasticsearch 支持大部分熔断器动态修改,实时监控并按需调整是维护集群稳定性的关键。

  • 关注日志与监控系统
    使用 Elasticsearch 的日志系统及监控工具,及时发现并分析 Circuit Breaker 错误,合理调整内存阈值。

四、总结

Circuit Breaker 是 Elasticsearch 集群运行中的重要保护机制。深入理解各类熔断器的作用及配置方法,合理设置各项阈值,能有效防止 Elasticsearch 由于内存资源耗尽而宕机,从而提升整个集群的稳定性和性能表现。

运维人员应结合业务场景,动态监控并适时调整熔断器配置,以保持 Elasticsearch 集群稳定高效地运行。

http://www.lryc.cn/news/597451.html

相关文章:

  • MCU驱动AD5231BRUZ_10K
  • 【Elasticsearch】跨集群检索(Cross-Cluster Search)
  • 83、设置有人DTU设备USR-M100采集传感器数据,然后上传阿里云服务
  • now能减少mysql的压力吗
  • 旅游管理虚拟仿真实训室:重构实践教学新生态
  • 【数据库】国产数据库的新机遇:电科金仓以融合技术同步全球竞争
  • 云蝠智能 Voice Agent:重构企业语音交互,引领 AI 服务新范式
  • QGraphicsScene导出为PDF
  • SQL Server 数据类型的含义、特点及常见使用场景的详细说明
  • 【轨物洞见】光伏逆变器数据:分布式电站价值回归的“第一块多米诺骨牌”
  • Pycharm2025 安装教程 免费分享 没任何套路
  • PyCharm高效进阶指南:掌握专业开发技巧与最佳实践
  • Spring DeferredResult 实现长轮询
  • [HarmonyOS] HarmonyOS LiteOS-A 设备开发全流程指南
  • 清华大学层次化空间记忆助力具身导航!Mem4Nav:基于层次化空间认知长短期记忆系统的城市环境视觉语言导航
  • 本地部署 Stable Diffusion:零基础搭建 AI文生图模型
  • 仓颉兴趣组优秀项目-Ginger
  • CPU,减少晶体管翻转次数的编码
  • opencv学习(视频读取)
  • 策略模式(Strategy Pattern)+ 模板方法模式(Template Method Pattern)的组合使用
  • AR维修辅助系统UI设计:虚实融合界面中的故障标注与操作引导
  • 设计模式(单例)
  • ar景区导航导览开发方案:核心技术架构与功能设计
  • HarmonyOS学习记录5
  • 第三章.Redis渐进式遍历
  • 计算机毕设分享-基于SpringBoot的房屋租赁系统(开题报告+源码+Lun文+开发文档+数据库设计文档)
  • 神经架构搜索革命:从动态搜索到高性能LLM的蜕变之路
  • Spark实现WorldCount执行流程图
  • 05-ES6
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(2)