当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch-高索引吞吐量

程正阳
2023-03-14

我正在对ElasticSearch进行基准测试,以实现非常高的索引吞吐量。

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

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

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

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

refresh_interval设置为60,而不是300,最后15m,似乎没有多大帮助。窥探单个分片中的单个Translog,显示Translog每30分钟刷新一次,然后达到200MB。

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

  1. 1个索引,包含60个碎片(无副本)
  2. 3个索引,每个索引有20个碎片(无副本)

两次尝试都会产生类似的体验,我想这是有道理的,因为碎片的数量是相同的。

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

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

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

我的问题如下:

  1. 假设磁盘目前是这个平台的瓶颈,那么这种逐渐提高磁盘利用率的现象是正常现象吗?如果没有,可以采取什么措施来消除这些影响
  2. 我可以做一些微调来提高索引吞吐量吗?我应该吗?或者我应该扩大规模

共有1个答案

皇甫逸清
2023-03-14

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

从windows机器到linux的过渡主要是因为方便和遵守IT惯例。虽然我不确定,但我怀疑同样的结果也可以在windows上实现。

在我的几次试验中,我试图按照克里斯蒂安·达尔奎斯特的建议,在没有指定文档id的情况下编制索引。结果是惊人的。我观察到吞吐量显著增加,在某些情况下达到300k甚至更高。结论是显而易见的:除非万不得已,否则不要指定文档ID。

此外,我在每台机器上使用更少的分片,这也有助于吞吐量的增加。

 类似资料:
  • 我需要从很多客户端通过网络套接字连接到java服务器来提取数据。 有很多web套接字实现,我选择了vert。x、 我做了一个简单的演示,在那里我听json的文本帧,用jackson解析它们,然后返回响应。Json解析器对吞吐量没有显著影响。 我的总速度是每秒2.5公里,有2到10个客户。 然后我尝试使用缓冲,客户端不会等待每个响应,而是在服务器确认后发送一批消息(30k-90k),速度提高到每秒8

  • 本文向大家介绍springboot高并发下提高吞吐量的实现,包括了springboot高并发下提高吞吐量的实现的使用技巧和注意事项,需要的朋友参考一下 公司让做一个全文检索的项目,我使用的是elasticsearch。但是对性能有很高的要求,为了解决性能问题,我简直是寝食难安。 es(elasticsearch)没有使用分布式,单台的。 开发完测试的时候,查询慢,吞吐量低。 网友们建议用异步--使

  • 来自AWS Lambda常见问题解答: Q: 我一次可以执行的AWS Lambda函数的数量是否有限制? 不需要。AWS Lambda旨在并行运行多个函数实例。然而,AWS Lambda的默认安全限制为每个区域每个帐户100次并发执行。如果您希望提交请求以增加100次并发执行的限制,您可以访问我们的支持中心,单击“打开新案例”,然后提交服务限制增加请求。 Q: 如果我的帐户超过并发执行的默认限制,

  • 在大数据存储中,IOPS和吞吐量之间的关键区别是什么

  • 我正在做一个研究项目,我在谷歌云平台上安装了一个完整的数据分析管道。我们使用Spark上的HyperLogLog实时估计每个URL的唯一访问者。我使用Dataproc来设置Spark集群。这项工作的一个目标是根据集群大小来度量体系结构的吞吐量。Spark集群有三个节点(最小配置) 使用Java编写的数据生成器模拟数据流,其中我使用了kafka producer API。体系结构如下所示: 我用一个

  • 问题内容: 我知道这是一个非常笼统的问题。但是,我想了解使Redis(或诸如MemCached,Cassandra之类的缓存)在惊人的性能极限下工作的主要架构决策是什么。 如何维护连接? 连接是TCP还是HTTP? 我知道它完全用C编写。如何管理内存? 尽管存在竞争的读/写,但用于实现高吞吐量的同步技术有哪些? 基本上,具有内存高速缓存的计算机和可以响应命令的服务器的普通香草实现和Redis框之间