业务需求:对写入速度要求高。但是对实时搜索数据可靠性并不高。
加大tranlog flush间隔
降低写阻塞
默认每个请求都flush
index.translog.durability: request
改变:
index.translog.durability: async
设置为async表示translog的刷盘策略按sync_interval配置指定的时间周期进行。
index.translog.sync_interval: 120s
加大translog刷盘间隔时间。默认为5s,不可低于100ms。
index.translog.flush_threshold_size: 1024mb
超过这个大小会导致refresh操作,产生新的Lucene分段。默认值为
512MB。
加大index refresh间隔
降低IO,降低segement merge
默认情况下索引的refresh_interval为1秒,这意味着数据写1秒后就
可以被搜索到,每次索引的refresh会产生一个新的Lucene段,这会导致
频繁的segment merge行为,如果不需要这么高的搜索实时性,应该降低
索引refresh周期,例如:
index.refresh_interval: 120s
调整bulk请求
批量写比一个索引请求只写单个文档的效率高得多,但是要注意bulk请求的整体字节数不要太大,太大的请求可能会给集群带来内存压力,因此每个请求最好避免超过几十兆字节,即使较大的请求看上去执行得更好
shard尽量均匀
优化Lucene建立索引过程
禁用_all
禁用norms