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

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

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

一、Circuit Breaker 简介

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

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

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

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

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

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

推荐配置:

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.sczhlp.com/news/924/

相关文章:

  • ROS1(20.04 noetic) + PX4 + AirSim
  • 扩散模型-PPDM-95 - jack
  • 5.5 减少过程调用
  • spring springmvc springboot的区别
  • 13N90-ASEMI太阳能逆变器专用13N90
  • 基于Matlab的无人机地面固定目标稳定跟踪
  • 在Go语言微服务中实现服务监控
  • readv() writev()
  • Spring 中的 BeanFactory 和 ApplicationContext
  • Umi 约定式路由解析
  • SFUD库应用教程:串行SPI Flash驱动开发的最佳实践
  • 【刷题笔记】Peaks
  • spring security
  • required关键字和特性的区别
  • 详细介绍:理想不再“追星”华为。
  • C++小白修仙记_LeetCode刷题_1.两数之和
  • synchronized底层实现是什么 lock底层是什么 有什么区别
  • iOS 性能监控 苹果手机后台运行与能耗采样实战指南
  • pygame小游戏打飞机_1展示窗口
  • 个人版Navicat17 Lite版本安装教程(附安装包)2025最新版详细图文安装教程
  • Fluent许可状态监控工具
  • 链上充值监听与自动划转资金流程实现 - fox
  • 如何缓解Petya和WannaCrypt等快速网络攻击 | MSRC博客
  • 基于Amazon Translate的深度学习教材自动翻译系统
  • AI视频自动剪辑大师 v5.0 绿色版
  • 文件完整性校验工具 CHK 5.51 绿色中文版
  • 2025年7月26日,工信部人才交流中心 CUUG - PGCP/PGCM认证考试完成!
  • 2025.7.28暑假集训第一次普及组训练总结
  • 入职—员工体验的关键时刻,看AI Agent如何将体验值、效率值双双拉满
  • 寻疗智慧 IOT 数字健康服务平台