我试图弄清楚为什么Elasticsearch在索引编制方面如此之慢。我不确定这是否是Elasticsearch本身的局限性,但我将分享到目前为止的内容。
我有一个elasticsearch节点和一个运行在一个盒子上的logstash实例。我的文档大约有15个字段,并且我有一个具有正确类型的elasticsearch映射设置(尽管我尝试了不使用映射并获得几乎相同的结果)。
我一次将大约8到1千万个事件编入索引,并采用了以下方法。
具有以下格式的批量api(我将csv转换为JSON并将其放入文件中,并在其中卷曲
{"create" : {}} {"field1" : "value1", "field2" : "value2 .... } {"create" : {}} {"field1" : "value1", "field2" : "value2 .... } {"create" : {}} {"field1" : "value1", "field2" : "value2 .... }
我还尝试了使用原始csv的tcp输入或使用文件侦听器的logstash,并将csv记录到logstash正在侦听的文件的末尾。
这三种方法似乎每秒都吸收约10,000个事件,这非常慢。
难道我做错了什么?我是否应该在批量提取中明确分配一个ID,而不是让其自动生成一个ID?
通过批量API提取时,我将事件分为50,000个事件文件和100,000个事件文件,并分别提取了每个事件文件。
您会发现我在这里对此进行了一些研究,您可以下载Indexing Scripts文件,该文件包含一些有用的脚本,可最大程度地提高索引性能。实际上,在硬件和Elasticsearch索引优化方面确实有所不同。即删除副本节点等。
希望这对您有所帮助。