【问题标题】:Fast indexing using multiple ES nodes?使用多个 ES 节点进行快速索引?
【发布时间】:2015-06-02 18:57:26
【问题描述】:
我阅读和理解的关于运行多个 ES 节点的全部内容是启用索引复制和扩展。我想知道它是否可以帮助我们更快地为大量文件建立索引。我有两个问题,它们如下:
问题 1:认为使用多个 ES 节点可以让我们更快地索引数倍是否准确?
问题2:如果我一直启用所有节点作为数据节点,它对索引有什么影响?另一方面,如果我的非数据节点很少(例如,一个专用主节点和一个专用客户端节点)而数据节点很少,它对索引有什么影响?在速度和扩展性方面哪个会更好?
【问题讨论】:
标签:
java
indexing
elasticsearch
lucene
scalability
【解决方案1】:
答案1:没有。
如果启用复制,索引速度实际上会降低(尽管它可能会提高搜索性能)。您可以查看this question 以提高索引性能。
Answer2:视情况而定(如果没有副本则相同)。
在索引期间,数据将仅传输到数据节点。您的集群状态将包含有关哪些节点是数据节点的信息,并相应地路由请求。性能影响仅是因为接收请求的节点必须将请求重新路由/转发到数据节点
【解决方案2】:
如果您在不增加副本数量的情况下添加机器,您将在索引期间获得更好的性能。这并不奇怪,因为您正在添加更多资源,而要完成的工作量几乎相同。
在我们的环境中,我们在生产中使用 20 个节点,在调试中使用 5-10 个节点。两种环境都拥有相同的数据量。由于 ES 更新速度(我们使用 groovy 脚本将新文档合并到现有文档)是我们的主要瓶颈,因此我们能够在生产环境中看到比其他环境更好的性能。
您已经在问题的其他答案中获得了一些有用的链接。我可以补充一点,在我们的案例中,数据上传改进的 3 个最重要的因素是:减少 refresh_interval、增加 merge_factor 和使用 Elastic-Hadoop 插件(我们从 Spark 上传数据)处理应用程序上的所有主要数据传输优化水平。
- 这些步骤中的每一个都有自己的缺点,因此在更改配置之前请仔细阅读手册。