问题遇到的现象和发生背景
现象:使用elasticsearch java api RestHighLevelClient 客户端查询索引数据,耗时7~8分钟
业务使用场景:页面模糊搜索,要求对所有索引content、phone字段进行模糊查询或者对于phone精确查询
索引存储方式:按天存储,总共存储14个月的索引,比如:index_20221201
数据量级:目前3000亿,数据还在持续增加
数据录入方式:自己实现代码,使用scala开发,spark本地模式,实现读取本地gz文件解析内容写入es,一天录入数据量80亿左右
录入字段数量:12个字段
目前录入索引数量:216个,预计410个
查询做法:使用elasticsearch java api RestHighLevelClient 客户端查询索引数据
查询方式:包含terms、term、match、range、wildcard
操作环境、软件版本等信息
操作环境:
- 操作系统:centos7.9
- 硬件配置:五台物理机,56核心处理器,512GB内存,80T机械磁盘,1T*2 SSD磁盘安装操作系统,主备安装
软件版本: - jdk1.8
- elasticsearch版本:7.0.0
部署方式:
每台物理机部署11个实例,1个只作为客户端使用,既不是数据节点也不是master节点,1个既作为数据节点也作为master节点,9个作为数据节点
JVM配置为:32GB尝试过的解决方法
- 增加实例,起初只有五个实例
- 调整配置参数:
{
"persistent" : {
"indices.breaker.total.limit":"95%",
"indices.breaker.fielddata.limit":"40%",
"indices.breaker.request.limit":"70%"
}
}
indices.fielddata.cache.size:30%
关闭swap
swapoff -a
我想要达到的结果
查询速度提升到秒级