一、前言
近期有个项目用spark向es(版本5.x)写入数据,该项目是离线任务,每天创建一个index存数据,随着数据量的增大(2亿+,峰值有5亿+)。性能出现问题:写入时间过长,es响应不过来等
二、 调整策列
1.由于该项目是离线任务,并不是需要实时查询,可以将es中的near real-time search属性 设置较高的阈值30s或者-1 。默认情况下写入到es的数据并不是马上就刷到磁盘,先放在 in-memory buffer,但客户端是读取不到in-memory buffer中的数据,为了实时查询,需要定期(默认1s)将该数据刷写到介于es和磁盘之间的filesystem cache 即refresh,该操作轻量级的 。写入到filesystem cache相当于创建新的segment 是可以被客户端读取到的, 默认属性(阈值是1s)由于快速的刷数据导致很多小量的filesystem cache,同时写入到filesystem cache仍然有一些性能消耗,所以根据应用的使用场景,如果是关注写入速度并不关注实时查询,可以适当调整默认的阈值的,该属性是在创建索引(属性值为:index.refresh_interval)的时候设置 的 。关于near real-time search 原理 见官网链接:Near Real-Time Search
2.index.translog.durability 默认值是request,该属性类似于hba