项目难点分析

elasticsearch 数据加载触发熔断

我们的 es 集群采用每日跑批推送全量数据 + 消息队列推送实时数据。全量推送是每日跑批完成后,由hbase生成txt文件,将文件推送到es部署服务器目录下,然后由 java 进程使用hazelhast jet 推送数据。某日在推送全量数据的时候触发了ES的内存熔断。

排查步骤:

  1. 通过cat命令查看ES的内存分布情况
GET _cat/nodes?h=name, heapCurrent, fielddataMemory, queryCacheMemory, requestCacheMemory

ES的堆内存由两部分组成,一部分是由 Lucene 引擎使用,这部分可以被垃圾回收;另一部分存储ES相关缓存,主要包括:

  • queryCache:filter过滤器结果缓存,使用 LRU 淘汰策略
  • requestCache:存储聚合结果
  • fieldDataCache:存储索引需要排序及聚合的对应列的全部数据
  • segmentsMemory:存储 Lucense 段的元信息