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…