gpt4 book ai didi

ElasticSearch - 高索引吞吐量

转载 作者:行者123 更新时间:2023-11-29 02:43:05 26 4
gpt4 key购买 nike

我正在为非常高的索引吞吐量目的对 ElasticSearch 进行基准测试。

我目前的目标是能够在数小时内为 30 亿 (3,000,000,000) 份文档编制索引。为此,我目前有 3 台 Windows 服务器机器,每台机器有 16GB RAM 和 8 个处理器。插入的文档有一个非常简单的映射,只包含少数数字非分析字段(_all 已禁用)。

我可以达到每秒大约 120,000 个索引请求(使用大桌面进行监控),使用这个相对适中的装备,我相信吞吐量可以进一步提高。我正在使用许多 .net NEST 客户端来发送索引批量请求,其中批量有 1500 个索引操作。

不幸的是,每秒 120k 请求的吞吐量并没有持续很长时间,并且速率逐渐下降,几个小时后下降到 ~15k。

监控机器表明 cpu 不是瓶颈。然而,所有机器上的物理磁盘(不是 SSD)空闲时间似乎都在下降,达到不到 15% 的平均空闲时间。

refresh_interval 设置为 60s,然后设置为 300s,最后设置为 15m,似乎没有多大帮助。监视单个分片中的单个 translog,表明 translog 在达到 200MB 之前每 30 分钟刷新一次。

我尝试过使用两种分片策略:

  1. 1 个索引,60 个分片(无副本)。
  2. 3 个索引,每个索引有 20 个分片(无副本)。

这两种尝试都产生了非常相似的体验,我认为这是有道理的,因为它的碎片数量相同。

查看段,我可以看到大多数分片有大约 30 个已提交的段,以及类似数量的可搜索段。段大小变化。有一次,尝试用 max_num_segments=1 优化索引,完成后似乎有点帮助(花了很长时间)。

在任何时候,从头开始整个摄取过程,在删除使用过的索引并创建新索引之后 - 会导致相同的行为。最初索引吞吐量很高,但逐渐减少,远未达到 30 亿文档的目标。当时的索引大小约为120GB。

我使用的是 ElasticSearch 1.4 版本。 Xms 和 Xmx 配置为 8192MB,可用内存的 50%。索引缓冲区设置为 30%。

我的问题如下:

  1. 假设磁盘目前是该设备的瓶颈,这种磁盘利用率逐渐增加的现象是否正常?如果不是,可以做些什么来抵消这些影响?
  2. 是否可以进行任何微调以提高索引吞吐量?我是不是该?还是我应该横向扩展。

最佳答案

长话短说,我最终得到了 5 个虚拟 linux 机器,8 个 cpu,16 GB,使用 puppet 来部署 elasticsearch。我的文档变大了一点,但吞吐率也变大了(略微)。我能够平均达到 150K 索引请求/秒,在 2 小时内索引 10 亿个文档。吞吐量不是恒定的,我观察到与以前类似的吞吐量减少行为,但程​​度较小。由于我将对相同数量的数据使用每日索引,因此我希望这些性能指标每天都大致相似。

从 windows 机器到 linux 的转变主要是由于方便和符合 IT 惯例。虽然我不确定,但我怀疑在 Windows 上也可以实现相同的结果。

在我的几次试验中,我尝试按照 Christian Dahlqvist 的建议在不指定文档 ID 的情况下建立索引。结果令人吃惊。我观察到显着 吞吐量增加,在某些情况下达到 300k 甚至更高。结论很明显:除非绝对必要,否则不要指定文档 ID。

此外,我在每台机器上使用的碎片较少,这也有助于提高吞吐量。

关于ElasticSearch - 高索引吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27388521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com