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)
  • 禁用 Swapbootstrap.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% 做搜索,那你不是在查数据,你是在给用户表演'系统正在思考人生'。"

相关推荐
2601_948374572 小时前
商用电子秤怎么选
大数据·python
jdyzzy2 小时前
什么是 JIT 精益生产模式?它与传统的生产管控方式有何不同?
java·大数据·人工智能·jit
Elastic 中国社区官方博客2 小时前
跳过 MLOps:通过 Cloud Connect 使用 EIS 为自管理 Elasticsearch 提供托管云推理
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
数研小生3 小时前
1688商品列表API:高效触达批发电商海量商品数据的技术方案
大数据·python·算法·信息可视化·json
dingzd953 小时前
AI 代理购物落地后,真正的“增量岗位”叫——商品数据工程
大数据·人工智能·跨境电商·内容营销·跨境
無森~3 小时前
HBase Java API
java·大数据·hbase
sensen_kiss3 小时前
Jupter Notebook 使用教程
大数据·人工智能·python·学习·数据分析
八月瓜科技3 小时前
2026春晚机器人专利战:从舞台秀到资本竞逐的产业突围
大数据·人工智能·microsoft·机器人·娱乐
伟大的大威3 小时前
NVIDIA DGX Spark (ARM64/Blackwell) Kubernetes 集群 + GPU Operator 完整部署指南
大数据·spark·kubernetes