Elasticsearch reindex效率提升
创始人
2024-05-05 13:43:47

reindex是5.X版本后新增的,主要用于对index级的数据进行重建。如果你的mapping里某个类型有修改或者你需要迁移数据那就可以借助reindex来完成,它很方便的进线异步重建,并且还支持跨集群。它的语法也特别简单:

curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d'
{"source": {"remote": {"host": "http://otherhost:9200;,"username": "user","password": "pass"},"index": "source","query": {"match": {"test": "data"}}},"dest": {"index": "dest"}
}
'

虽然它很棒,但在数据量特别大(30g以上)的情况下速度非常慢,即使是同集群内上大约不到5M/s的写入速度,但CPU还是IO使用率都很低。

纠其原理

  • reindex的底层是是通过scroll实现,能否借助并行优化

  • 批量值(size)值可能太小导致5M/s

  • 写入数据索引流程还可以优化,提升tps

1.借助scroll的sliced参数提升并发

reindex的底层是是通过scroll实现,每个Scroll请求,可以分成多个Slice请求,可以理解为切片,各Slice独立并行,利用Scroll重建或者遍历要快很多倍。

POST localhost:9200/_reindex?slices=5

slices大小设置注意事项(手动设置分片、自动设置分片):

  1. slices大小的设置可以为auto(针对单索引,slices大小=分片数;针对多索引,slices=分片的最小值)

  1. 当slices的数量等于索引中的分片数量时,查询性能最高效。slices大小大于分片数,非但不会提升效率,反而会增加开销

2.根据文档体积大小逐步递增提升批量索引请求

如果每批索引1000个文档(1000个文档是1mb),调整size值从大约5-15 MB的大容量开始,直到你看不到性能的提升

POST  localhost:9200/_reindex
{"source": {"index": "twitter","size": 5000},"dest": {"index": "new_twitter"}
}

3写入数据索引参数优化

3.1副本数设置为0

主要原因在于:复制文档时,将整个文档发送到副本节点,并逐字重复索引过程。 这意味着每个副本都将执行分析,索引和潜在合并过程。如果您使用零副本进行索引,则恢复副本的过程本质上是逐字节的网络传输。

PUT /demo_logs/_settings
{"number_of_replicas": 1
}

3.2 增加refresh间隔

如果正在进行大量数据导入,考虑先不要急于索引刷新refresh。可以将每个索引的refresh_interval到30s。

PUT /demo_logs/_settings
{ "refresh_interval": -1 }

此类问题从官网、原理甚至源码的角度思考,然后通过实践就能得到比默认设置reindex速度能提升N倍.

相关内容

热门资讯

阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...