Elasticsearch之下

上一篇上一篇

🛡️ 第六幕:集群容灾与扩展

1. 脑裂(Split Brain)

  • 网络分区 → 多个 Master 同时存在 → 数据写坏
  • 对策 :
    • discovery.zen.minimum_master_nodes = (master_eligible_nodes / 2) + 1(7.x 前)
    • 7.x+ 用 Raft,自动防脑裂

场景:某台服务器宕机

  • 如果挂的是 Data Node :
    • Primary Shard 挂了?→ 自动提升 Replica 为 Primary
    • 集群状态变 Yellow(副本缺失),但服务不中断!
  • 如果挂的是 Master Node :
    • 其他 Master-eligible 节点自动选举新老大(基于 Zen Discovery 或新版 Raft)

如何扩容?

  • 加机器 → 自动加入集群
  • 索引分片会自动 rebalance(数据迁移)
  • 查询自动路由到新节点 → 无缝扩展

💡 最佳实践:

  • 至少 3 个 Master 节点(防脑裂)
  • Data 节点按角色分离(hot-warm-cold 架构)

第七幕:调优与问题

瓶颈 优化手段
Refresh 太频繁 refresh_interval: 30s
Translog 同步太勤 translog.durability: async
副本太多 写入时设 replicas: 0,写完再加
Bulk 太小 单次 Bulk 5--15MB(约 1000--5000 docs)
Mapping 动态膨胀 关闭 dynamic: strict

1. 慢查询雪崩

  • 一个复杂聚合占满 CPU → 其他查询排队 → 集群 hang
  • 对策 :
    • search.default_search_timeout(超时熔断)
    • indices.breaker.*(内存熔断)
    • 监控 thread_pool.search.rejected

2. Field Data 爆炸

  • text 字段做聚合 → 加载到堆内存(Field Data)
  • 对策 :永远不要对 text 做聚合!用 keyword

3.极限写入架构:

Logstash/Filebeat → Kafka → Spark/Flink → ES Bulk Write

  • 中间加消息队列削峰
  • Flink 做窗口聚合,减少 ES 写入量

🚫 ES 对 JVM 的特殊要求:

  • 堆内存 ≤ 32GB(否则指针压缩失效,内存翻倍)
  • 堆内存 ≤ 物理内存 50%(留一半给 OS Page Cache)
  • 禁用 Swap (bootstrap.memory_lock: true)
区域 用途 调优建议
Heap 存储查询上下文、聚合中间结果 ≤ 31GB,G1GC
Page Cache 缓存 Segment 文件 越大越好(靠 OS 管理)
Translog 事务日志 SSD 必备
场景 为什么不适合 正确姿势
强事务 ES 不支持 ACID 用 MySQL,ES 只做搜索同步
频繁更新 更新 = 删除+重建,性能差 少量更新 or 用 _update 脚本
大宽表 JOIN 不支持 JOIN 用 Nested / Parent-Child(慎用)或应用层关联
精确计数(10亿级) total: 10000+ 是估算 用 track_total_hits=true(性能代价大)

✅ 记住 :
ES 是"搜索加速器",不是"主数据库"!

🎯 终极总结

原则 实现 目的
不可变性 Immutable Segments 高并发、缓存友好
近实时 Refresh + Translog 写入吞吐 vs 可见性平衡
列存聚合 Doc Values 高效 BI 分析
分片自治 Shard = Lucene Index 水平扩展
协调解耦 Coordinating Node 无状态,易扩展

ES 不是银弹,而是一套精密的权衡系统:

  • 用 空间换时间(Doc Values + 副本)
  • 用 延迟换吞吐(Refresh 间隔)
  • 用 复杂度换能力(分布式协调)

真正的大神,不是会用 ES,而是知道什么时候不该用 ES。

超能力 技术实现 效果
闪电搜索 倒排索引 + 分词 毫秒级全文检索
横向扩展 分片 + 集群 PB 级数据轻松扛
高可用 副本 + 自动故障转移 节点挂了照常工作
智能分析 聚合 + Doc Values 实时 BI 报表
近实时 Refresh + Translog 写入1秒可见,不丢数据

"如果你还在用 LIKE %keyword% 做搜索,那你不是在查数据,你是在给用户表演'系统正在思考人生'。"

相关推荐
天远Date Lab15 分钟前
零信任架构实战:基于天远风控经营异常预警构建自动化商业园区租户巡检网关
大数据·人工智能·架构·自动化
计算机编程指导师1 小时前
计算机毕设怎么做?基于Hadoop+Spark的商场商铺数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·商场商铺
Q26433650231 小时前
【有源码】基于Hadoop+Spark的低能见度易雾站点识别与可视化分析系统-面向气象保障的低能见度监测数据挖掘与风险画像系统
大数据·hadoop·数据挖掘·spark·毕业设计·课程设计·数据可视化
Wx-bishekaifayuan1 小时前
springboot大学生就业平台47691-计算机课程设计、毕业设计
java·spring boot·后端·elasticsearch·课程设计·express·旅游
鱼宵1 小时前
LangChain4j RAG 流水线:手写问答全流程,给 AI 开卷考试
大数据·人工智能·机器学习·langchain4j
蝶依斓(湖南)全案整装1 小时前
整装企业环保健康交付内容写作方法:空气健康、环保材料与检测标准的非空泛表达
大数据·人工智能
计算机编程指导师1 小时前
【大数据毕设】基于Hadoop+Django乳腺癌数据分析与可视化系统选题推荐 源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·乳腺癌
计算机编程指导师2 小时前
Python毕设怎么做?基于hadoop的商家优惠券营销效果数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·优惠券
吴声子夜歌2 小时前
Docker入门与实战——实战案例(分布式处理与大数据平台)
大数据·分布式·docker
计算机编程指导师2 小时前
【Python毕设推荐】基于Hadoop+Spark的商场商铺运行数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·课程设计·商场商铺