【发布时间】:2017-08-02 00:01:29
【问题描述】:
我将每个索引约 160GB 的大量每日数据索引到 elasticsearch 中。我正面临这种情况,我需要用少量数据(~16GB)更新索引中的几乎所有文档,其格式为
id1,data1
id1,data2
id2,data1
id2,data2
id2,data3
.
.
.
我的更新操作开始以每秒 16000 行的速度进行,在超过 5 分钟后,它下降到每秒 1000 行,之后不再上升。这 16GB 数据的更新过程目前比我的整个 160GB 索引发生的时间要长
我用于更新操作的 conf 文件目前如下所示
output
{
elasticsearch {
action => "update"
doc_as_upsert => true
hosts => ["host1","host2","host3","host4"]
index => "logstash-2017-08-1"
document_id => "%{uniqueid}"
document_type => "daily"
retry_on_conflict => 2
flush_size => 1000
}
}
根据https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-performance.html 此处的建议,我为加快集群中的索引速度所做的优化是
- 设置“indices.store.throttle.type”:“无”
- 索引“refresh_interval”:“-1”
我在 4 个 d2.8xlarge EC2 实例上运行我的集群。我为每个节点分配了 30GB 的堆。 虽然更新正在进行,但几乎没有使用任何 cpu,负载也非常少。
尽管更新非常缓慢。是否有一些我遗漏的非常明显的东西导致了这个问题?在查看线程池数据时,我发现处理批量操作的线程数一直很高。
在这个问题上的任何帮助都会非常有帮助
提前致谢
【问题讨论】:
-
您使用什么语言?听起来你在某处有内存泄漏。也许是一个打开的文件?
-
我也面临同样的问题。我们能解决缓慢的问题吗?