我试图找出为什么elasticsearch在索引方面如此缓慢.我不确定它是否是对弹性搜索本身的限制,但我会分享到目前为止我所拥有的.
我有一个弹性搜索节点和一个框上运行的logstash实例.我的文档有大约15个字段,我有一个弹性搜索映射设置与正确的类型(虽然我尝试没有映射,得到几乎相同的结果).
我一次索引大约800万到1000万个事件,并采取了以下方法.
使用以下格式的批量api(我将csv转换为JSON并将其放入我卷入的文件中
{"create" : {}} {"field1" : "value1", "field2" : "value2 .... } {"create" : {}} {"field1" : "value1", "field2" : "value2 .... } {"create" : {}} {"field1" : "value1", "field2" : "value2 .... }
我也尝试使用tcp输入和原始csv或使用文件监听器的logstash,并将csv cat到文件logstash正在监听的末尾.
所有这三种方法似乎每秒摄取大约10,000个事件,这非常慢.
难道我做错了什么?我是否应该在批量摄取中明确指定ID而不是让它自动生成一个?
通过批量API摄取时,我将事件分成50,000和100,000个事件文件,并分别进行摄取.
我推荐这个博客.在批量索引期间调整以下参数应该有所帮助,但是一旦完成,请减少refresh_interval.
index.store.type: mmapfs indices.memory.index_buffer_size: 30% index.translog.flush_threshold_ops: 50000 refresh_interval: 30s