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.pswp.cn/diannao/92868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92868.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARM-定時器-定時器函數封裝配置

以TIMER7為例&#xff0c;對定時器函數進行封裝注意事項&#xff1a;GD32中TIMER7是高級定時器&#xff0c;相關詳細請參考上一篇文章。main.c//main.c#include "gd32f4xx.h" #include "systick.h" #include <stdio.h> #include "main.h" …

【日志】unity俄羅斯方塊——邊界限制檢測

Bug修復記錄 項目場景 嘗試使用Unity獨自制作俄羅斯方塊&#xff08;也許很沒有必要&#xff0c;網上隨便一搜就有教程&#xff09; 問題描述 俄羅斯方塊的邊緣檢測出錯了&#xff0c;對方塊進行旋轉后&#xff0c;無法到達最左側或者最下側的位置&#xff0c;以及其他問題。演…

C++ string:準 STL Container

歷史STL 最初是一套獨立的泛型庫&#xff08;Alexander Stepanov 等人貢獻&#xff09;&#xff0c;后來被吸納進 C 標準庫&#xff1b;std::basic_string 則是早期 C 標準&#xff08;Cfront / ARM 時代&#xff09;就存在的“字符串類”&#xff0c;并非 STL 原生物。std::st…

Golang學習筆記--語言入門【Go-暑假學習筆記】

目錄 基礎語法部分相關概念 基礎語法部分概念詳解 可見性 導包 內部包 運算符 轉義字符 函數 風格 函數花括號換行 代碼縮進 代碼間隔 花括號省略 三元表達式 數據類型部分相關概念 數據類型部分概念詳解 布爾類型 整型 浮點型 復數類型 字符類型 派生類型…

linux中kill 命令使用詳解

在Linux系統里&#xff0c;kill命令的主要功能是向進程發送信號&#xff0c;以此來控制進程的運行狀態。下面為你詳細介紹它的使用方法&#xff1a; 基礎語法 kill [選項] [進程ID]進程ID也就是PID&#xff0c;可通過ps、pgrep或者top等命令來獲取。 常用信號及其含義 信號可以…

Nginx 安裝與 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服務器

Nginx 安裝與 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服務器 一、Nginx安裝 1. 安裝依賴項 sudo yum groupinstall "Development Tools" -y # 非必須 sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y2.下載Nginx wget http://n…

寫個 flask todo app,簡潔,實用

- 此項目雖然看起來簡單&#xff0c;實際上&#xff0c;修改成自己喜歡的樣子&#xff0c;也是費時間的。 - 別人都搞AI 相關的項目&#xff0c;而我還是搞這種基礎的東西。不要灰心。 - 積累。不論項目大小&#xff0c;不論難易&#xff0c;只看是否有用。項目地址&#xff1a…

4麥 360度定位

要在 ESP32 上用 4 個麥克風實現 360 聲源定位&#xff0c;通常思路是通過 時延估計&#xff08;TDOA&#xff09; 幾何計算&#xff0c;核心流程&#xff1a;陣列布置將 4 個麥克風等間距布置成正方形&#xff08;或圓形&#xff09;。記陣列中心為原點&#xff0c;麥克風編號…

使用yolov10模型檢測視頻中出現的行人,并保存為圖片

一、使用yolov10模型檢測視頻中出現的行人&#xff0c;并保存為圖片&#xff0c;detect_person.py代碼如下&#xff1a;from ultralytics import YOLOv10 import glob import os import cv2 import argparsedef detect_person(videoPath, savePath):if not os.path.exists(save…

現在希望用git將本地文件crawler目錄下的文件更新到遠程倉庫指定crawler目錄下,命名相同的文件本地文件將其覆蓋

git checkout main git pull origin main $source “D:\黑馬大數據學習\crawler” $dest Join-Path (Get-Location) “crawler” if (-not (Test-Path $dest)) { New-Item -ItemType Directory -Path $dest | Out-Null } Copy-Item -Path $source* -Destination $dest -Recur…

網絡調制技術對比表

&#x1f4ca; 網絡調制技術全維度對比表?調制技術??簡稱??頻譜效率??抗噪性??功率效率??復雜度??關鍵特性??典型應用場景??幅度鍵控?ASK低差高低/低電路簡單&#xff0c;易受干擾遙控器、光通信(OOK)?頻移鍵控?FSK低-中中中中/中抗噪較好&#xff0c;頻譜…

優化 Elasticsearch JVM 參數配置指南

一、概述 Elasticsearch 是基于 JVM 的搜索和分析引擎。JVM 參數的合理配置直接影響著 Elasticsearch 的性能和穩定性。盡管 Elasticsearch 已經提供了默認的 JVM 設置&#xff0c;但在某些特定場景下&#xff0c;我們可能需要進行適當的調整和優化。 本文將詳細講述如何安全、…

Python, Go 開發如何進入心流狀態APP

要開發一款基于Python和Go語言、幫助用戶進入“心流”狀態&#xff08;高度專注、高效愉悅的心理狀態&#xff09;的應用&#xff0c;需結合兩種語言的技術優勢&#xff08;Go的高并發與性能、Python的靈活性與AI生態&#xff09;及心流觸發機制&#xff08;清晰目標、即時反饋…

一文詳解手機WiFi模塊與連接

目錄 1 硬件模塊 1.1 Wifi射頻模 1.2 電源管理模塊 2 軟件與協議棧 2.1 系統服務層 2.2 認證與協議處理 3 連接流程 3.1 開啟WiFi與掃描 3.2 選擇網絡與認證 3.3 連接與IP分配 4 特殊連接方式 4.1 WPS快速連接 4.2 熱點模式&#xff08;AP模式&#xff09; 4.3 U…

Java 網絡編程詳解:從基礎到實戰,徹底掌握 TCP/UDP、Socket、HTTP 網絡通信

作為一名 Java 開發工程師&#xff0c;你一定在實際開發中遇到過需要與遠程服務器通信、實現客戶端/服務端架構、處理 HTTP 請求、構建分布式系統等場景。這時&#xff0c;Java 網絡編程&#xff08;Java Networking&#xff09; 就成為你必須掌握的核心技能之一。Java 提供了豐…

Java面試題(中等)

1. 計算機網絡傳輸層有哪些協議&#xff1f;分別適用于什么場景&#xff1f;TCP協議(傳輸控制協議)?&#xff1a;面向連接、可靠傳輸&#xff0c;流量控制、擁塞控制。適用于要求數據完整性的場景&#xff0c;如文件傳輸、網頁瀏覽、電子郵件等。UDP協議 (用戶數據報協議)?&a…

Apache 消息隊列分布式架構與原理

消息隊列 基本概念 定義 消息隊列&#xff08;Message Queue, MQ&#xff09;是一種分布式中間件&#xff0c;通過異步通信、消息暫存和解耦生產消費雙方的機制&#xff0c;提供消息的順序性保證、可靠投遞和流量控制能力&#xff0c;廣泛應用于微服務解耦、大數據流處理等場景…

ModernBERT如何突破BERT局限?情感分析全流程解析

自2018年推出以來&#xff0c;BERT 徹底改變了自然語言處理領域。它在情感分析、問答、語言推理等任務中表現優異。借助雙向訓練和基于Transformer的自注意力機制&#xff0c;BERT 開創了理解文本中單詞關系的新范式。然而&#xff0c;盡管成績斐然&#xff0c;BERT 仍存在局限…

股票Level2逐筆成交及十檔訂單簿分鐘級Tick歷史行情數據詳細解析

本地股票數據處理與分析實戰指南 在量化投資與金融數據分析領域&#xff0c;高效處理本地存儲的股票數據是核心能力之一。本文將從數據類型定義、解析流程及實際應用角度&#xff0c;系統介紹如何基于CSV文件管理股票分鐘數據、高頻Tick數據、逐筆數據、Level2歷史行情等多樣化…

面向互聯網2C業務的分布式類Manus Java框架

本文介紹了阿里巴巴推出的分布式類ManusAgent框架——ali-langengine-dflow&#xff0c;旨在解決現有Agent架構在互聯網2C業務場景中的局限性。文章從背景出發&#xff0c;分析了當前主流Agent架構&#xff08;如Manus、字節TARS、AutoGLM&#xff09;存在的問題&#xff0c;如…