Elasticsearch如何確保數據一致性?

Elasticsearch 通過多種機制確保數據在分布式環境中的一致性,但由于其分布式和近實時(Near Real-Time, NRT)的特性,它提供的是最終一致性(Eventual Consistency),而非強一致性。以下是核心機制和策略:


一、寫入一致性控制(Write Consistency)

在寫入操作(如索引/更新文檔)時,可通過參數 consistency 控制最小副本數要求:

PUT my-index/_doc/1?consistency=quorum
{"field": "value"
}

可選值:

  • quorum(默認):多數分片副本可用(公式:int( (primary + number_of_replicas) / 2 ) + 1)。
  • all:所有分片副本必須可用。
  • one:僅主分片可用即可。

👉 作用:防止網絡分區時數據寫入不一致。


二、主分片機制(Primary Shard)

  1. 所有寫操作僅由主分片處理,再同步到副本分片。
  2. 寫操作順序性:主分片按收到請求的順序執行寫入,確保操作序列一致。

三、樂觀并發控制(Optimistic Concurrency Control)

使用 _versionif_seq_no/if_primary_term 避免并發沖突:

PUT my-index/_doc/1?if_seq_no=5&if_primary_term=1
{"field": "new_value"
}

👉 如果版本號不匹配,操作失敗(返回 409 Conflict),由客戶端決定重試或合并數據。


四、事務日志(Translog, Write-Ahead Log)

  1. 寫入操作首先存入內存緩沖區,同時追加到磁盤事務日志(Translog)。
  2. 故障恢復:節點重啟時,通過重放 Translog 恢復未刷新的數據。
  3. 刷新(Refresh):默認每秒將內存緩沖區數據生成新的 Lucene 段(可搜索,但尚未持久化)。
  4. 刷盤(Flush):定期(或 Translog 達到閾值)將 Lucene 數據持久化到磁盤,并清空 Translog。

📌 關鍵點:Translog 確保即使宕機,已確認的寫入操作不會丟失。


五、副本同步(Replication)

  1. 主分片寫入成功后,并行將操作轉發到副本分片。
  2. 同步要求
    • 主分片等待所有副本分片的成功響應(可通過 wait_for_active_shards 參數調整)。
    • 若副本失敗,主分片通知主節點將副本標記為失效,并在其他節點重建副本。

六、讀一致性(Read Consistency)

  1. 默認近實時(NRT):寫入后約 1 秒(可調整 refresh_interval)才可被搜索到。
  2. 指定刷新:可通過 ?refresh=true 強制立即刷新,但影響性能。
  3. 搜索參數控制
    • preference:控制查詢路由(如 _local 優先本地分片)。
    • wait_for_active_shards:搜索時等待指定數量分片可用。

七、腦裂防護(Split-Brain Protection)

通過配置 discovery.zen.minimum_master_nodes(舊版)或 cluster.initial_master_nodes(新版)避免網絡分區時出現多主節點,導致數據分裂。


八、最終一致性的體現場景

場景表現
寫入后立即查詢可能查不到(因未刷新)/ 可能查到主分片但副本未同步
副本分片故障期間寫入數據寫入主分片,副本恢復后自動同步
節點宕機恢復通過 Translog 恢復未持久化數據,副本從主分片重新同步

九、生產環境建議

  1. 合理設置副本數:至少 1(允許單節點故障)。
  2. 調整刷新間隔:對實時性要求高的場景可縮短 refresh_interval(代價:資源消耗增加)。
  3. 關鍵寫入操作:使用 ?refresh=wait_for 或手動刷新。
  4. 監控分片狀態:通過 GET _cluster/health 關注 active_shards_percent_as_number
// 創建索引時優化配置示例
PUT my-index
{"settings": {"number_of_replicas": 2,"refresh_interval": "500ms",  // 降低刷新延遲"translog.durability": "request"  // 每次請求后刷寫Translog(更強持久化)}
}

💡 權衡提示:更高的一致性保證往往以犧牲寫入吞吐量和延遲為代價,需根據業務需求調整參數。

通過上述機制,Elasticsearch 在分布式、高并發的場景下,平衡了性能與數據一致性的需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94492.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94492.shtml

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

相關文章

2026畢設選題-大數據-基于 Spring Boot的化妝品推薦系統的設計與實現

技術范圍:大數據、物聯網、SpringBoot、Vue、SSM、HLMT、小程序、PHP、Nodejs、Python、爬蟲、數據可視化、安卓App、機器學習等設計與開發。 主要內容:功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文降重、長…

數據結構算法:順序表

數據結構:順序表一.寄包柜1.題目如何創建數組?1. 需求本質2. 傳統靜態數組的缺陷3. 動態方案:向量的數組4. 核心邏輯5. 關鍵優勢總結2.解題思路2.1題目分析2.2具體解題邏輯拆解步驟2.3總結2.4參考代碼二.移動零1.題目2.解題思路2.1**解題核心…

IIS 安裝了.netcore運行時 還是報錯 HTTP 錯誤 500.19

IIS 安裝了.netcore運行時 還是報錯 HTTP 錯誤 500.19 - Internal Server Error 錯誤代碼 0x8007000d 我甚至是先安裝的SDK,再安裝的運行時runtime的安裝包,都不行。 而且在IIS的模塊中,找不到 AspNetCoreModuleV2。 最后在微軟官網n…

Flink 滑動窗口實戰:從 KeyedProcessFunction 到 AggregateFunction WindowFunction 的完整旅程

一、業務背景 我們要在 Flink 實時流上統計 每個用戶-品牌組合最近 1 小時的最晚行為時間,并且每 5 分鐘更新一次結果。 數據來自 Kafka,事件類型為 CartEvent: public class CartEvent {public String userId;public String brandId;public …

Kubernetes“城市規劃”指南:告別資源擁堵與預算超支,打造高效云原生都市

導讀: 如果把你的Kubernetes集群想象成一座拔地而起的現代化大都市,那么你,平臺工程師,就是這座城市的首席規劃師。然而,為何我們精心打造的許多“云原生都市”正迅速陷入交通擁堵、資源閑置和預算超支的困境&#xff…

2.4 Flink運行時架構:Task、SubTask、ExecutionGraph的關系

在理解Flink運行時架構之前,我們先用一個生活化的比喻來建立直觀認識: 想象你是一家大型工廠的總經理,需要生產一批復雜的產品。你會怎么做? 制定生產計劃:首先畫出生產流程圖,明確每個環節的工作內容分解任…

`mysql_query()` 數據庫查詢函數

1) 函數的概念與用途 mysql_query() 是 MySQL C API 中的核心函數,用于向 MySQL 服務器發送 SQL 查詢語句。這個函數充當了 C/C 應用程序與 MySQL 數據庫之間的橋梁,允許程序執行各種數據庫操作。 可以將 mysql_query() 想象成一個"數據庫信使"…

[系統架構設計師]通信系統架構設計理論與實踐(十七)

[系統架構設計師]通信系統架構設計理論與實踐(十七) 一.通信系統網絡架構 形式: 局域網,廣域網,移動通信網 1.局域網網絡架構 單一機構專用計算機的網絡 組成:計算機,交換機,路由器 特點&#x…

【趙渝強老師】Docker的私有鏡像倉庫:Harbor

Harbor是由VMware公司開發并開源的企業級的Docker鏡像倉庫的管理項目,它包括鏡像的權限管理(RBAC)、目錄訪問(LDAP)、日志審核、管理界面、自我注冊、鏡像復制和中文支持等功能。 視頻講解如下 【趙渝強老師】Docker的…

【QT/C++】實例理解類間的六大關系之泛化關系(Generalization)

【QT/C】實例理解類間的六大關系之泛化關系(Generalization) 在前面章節一文完美概括UML類圖及其符號(超詳細介紹)中已經對泛化關系的概念進行了總結,本文我將用實際案例來進一步理解泛化關系,以便應對未來…

【微服務的數據一致性分發問題】究極解決方案

文章目錄一、微服務數據分發1、簡介2、典型場景(1)跨服務業務流程協同(2)數據副本同步(讀寫分離)(3)實時狀態通知(4)數據聚合與統計分析(5&#x…

挖幣與區塊鏈技術有怎樣的聯系?

挖幣(通常指加密貨幣挖礦)與區塊鏈技術有著緊密的聯系,挖礦是區塊鏈網絡維持運行和安全的重要機制之一,具體聯系如下:1. 挖礦是區塊鏈共識機制的核心環節區塊鏈通過“共識機制”確保全網節點對交易記錄達成一致&#x…

C數據結構:二叉樹(下)

C數據結構:二叉樹(下) 1.二叉樹遞歸結構遍歷 2.例題 3.二叉樹的性質 1.二叉樹遞歸結構遍歷 我們先創建一個如下圖所示的二叉樹。typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struc…

Linux系統的網絡管理(一)

一、網絡參數配置:搭建穩定網絡基礎網絡參數配置是 Linux 網絡管理的起點,根據操作方式可分為圖形化配置、命令行配置和配置文件配置,不同方式適用于不同場景(臨時調試 / 永久生效)。1. 圖形化配置:依賴 Ne…

Web程序設計

一、控件基礎 文本框、按鈕事件的使用 <% Page Language"C#" AutoEventWireup"true" CodeFile"User_Login.aspx.cs" Inherits"User_Login" %><!DOCTYPE html><html xmlns"http://www.w3.org/1999/xhtml"&g…

復合設計模式

復合設計模式復合設計模式是一種結構模式&#xff0c;可讓您統一處理單個對象和對象的組合。它允許您構建樹狀結構&#xff08;例如&#xff0c;文件系統、UI 層次結構、組織結構&#xff09;&#xff0c;客戶端可以使用同一界面處理單個元素和元素組。它在以下情況下特別有用&…

使用 Prometheus 監控服務器節點:Node Exporter 詳解與配置

前言 在上一篇文章中&#xff0c;我們介紹了如何在 CentOS 上部署 Prometheus 并使用 systemd 進行管理。本文將繼續深入&#xff0c;講解如何使用 Prometheus 監控服務器節點&#xff0c;重點介紹 Node Exporter 的作用、安裝和配置方法。 Node Exporter 是 Prometheus 生態…

C# 編寫一個XmlToDota的轉換工具

以下代碼可以將Labelme標注的旋轉框Xml格式文件轉換為Yolo標注格式的txt文件&#xff0c;以便用Yolo OBB訓練自己的數據集&#xff1a;using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Linq; using System.Globalization;na…

[Android] 人體細胞模擬器1.5

[Android] 人體細胞模擬器1.5 鏈接&#xff1a;https://pan.xunlei.com/s/VOYVUieTpjNVJq-bMys4EEDGA1?pwdm7m6# 省流:這個軟件的開發者有點逆天&#xff0c;一個模擬人體器官的軟件&#xff0c;細致到有血液報告&#xff0c;還縫合了生理學和病理學&#xff0c;甚至還能做切…

【Linux基礎知識系列】第一百一十篇 - 使用Nmap進行網絡安全掃描

在網絡安全管理中&#xff0c;了解網絡中的設備、開放的端口以及運行的服務是至關重要的。Nmap&#xff08;Network Mapper&#xff09;是一個功能強大的開源工具&#xff0c;用于網絡發現和安全審計。它可以掃描網絡中的設備&#xff0c;識別開放的端口和運行的服務&#xff0…