Elasticsearch的新手。我一直在做大量的阅读,但我希望SO上的专家可以权衡我的群集配置,看看是否有我遗漏的东西。
目前我正在使用ES(1.7.3)为每个文件索引一些非常大的文本文件(约7亿行)并查找每个文件的一个索引。我使用logstash(V2.1)作为索引文件的首选方法。配置文件在这里是我的第一个索引:
input {
file {
path => "L:/news/data/*.csv"
start_position => "beginning"
sincedb_path => "C:/logstash-2.1.0/since_db_news.txt"
}
}
filter {
csv {
separator => "|"
columns => ["NewsText", "Place", "Subject", "Time"]
}
mutate {
strip => ["NewsText"]
lowercase => ["NewsText"]
}
}
output {
elasticsearch {
action => "index"
hosts => ["xxx.xxx.x.xxx", "xxx.xxx.x.xxx"]
index => "news"
workers => 2
flush_size => 5000
}
stdout {}
}
我的群集包含3个在Windows 10上运行的盒子,每个盒子运行一个节点。 ES未作为服务安装,我只是站在一个主节点上:
主节点:8GB RAM,ES_HEAP_SIZE = 3500m,单核i7
数据节点#1:8GB RAM,ES_HEAP_SIZE = 3500m,单核i7
此节点当前正在运行带有LS_HEAP_SIZE = 3000m
的logstash实例数据节点#2:16GB RAM,ES_HEAP_SIZE = 8000m,单核i7
我目前ES已配置为默认的5个分片+每个索引1个重复。
目前,每个节点都配置为将数据写入外部HD并记录到另一个节点。
在我的测试运行中,我使用Logstash平均每秒10K事件。我的主要目标是优化这些文件加载到ES的速度。我认为根据我所读到的内容,我应该接近80K。
我一直在改变工人数量和冲洗大小,但似乎无法超越这个门槛。我想我可能会遗漏一些基本的东西。
我的问题有两个:
1)对于我的群集配置或可能改进流程的一些建议,是否有任何跳出来的东西?
2)如果我在索引单独文件的每个数据节点上运行logstash实例会有帮助吗?
非常感谢您提前获得的所有帮助以及花时间阅读。
-Zinga
答案 0 :(得分:0)
我首先看看logstash或es是否是您设置中的瓶颈。尝试在没有es输出的情况下摄取文件。你是从朴素/裸体的logstash得到什么。
如果这个数字要高得多,那么你可以继续做事。一个好的首发可能是: https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-performance.html
如果普通logstash没有显着提高吞吐量,您可以尝试增加/并行化整个机器的logstash。
希望有所帮助