gpt4 book ai didi

elasticsearch - Elasticsearch批量更新非常慢

转载 作者:行者123 更新时间:2023-12-02 22:58:31 26 4
gpt4 key购买 nike

我正在将每个索引约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”

  • 我在d2.8xlarge EC2实例的4个实例上运行群集。我已经为每个节点分配了30GB的堆空间。
    虽然更新几乎没有发生,但使用了任何CPU,而且负载也很少。

    尽管有所有更新,但更新还是非常缓慢。我是否很明显地缺少导致此问题的信息?在查看线程池数据时,我发现执行批量操作的线程数量一直很高。

    在这个问题上的任何帮助都会非常有帮助

    提前致谢

    最佳答案

    这里有一些排除规则可以尝试。

    内存压力

    有了244GB的RAM,这不太可能,但是您仍然可以检查出来。在JDK中找到适合您平台的jstat命令,尽管其中一些工具具有可视化工具。您想同时检查Logstash JVM和ElasticSearch JVM。

    jstat -gcutil -h7 {PID of JVM} 2s

    这将为您提供该JVM工作时的各种内存池,垃圾回收计数和GC计时的读数。它将每2秒更新一次,并每7行打印一次标题。在 FCT中花费过多的时间表明您没有为HEAP分配不足。

    I / O压力

    d2.8xlarge是一个密集存储实例,对于高度随机的小块工作负载可能并不理想。如果您在Unix平台上, top将告诉您在IOWAIT状态下花费了多少时间。如果存储空间过大,则说明您的存储无法满足您发送存储的工作量。

    在这种情况下,您可能需要考虑配置IOP EBS实例,而不是本地实例。或者,如果您的内容合适,请考虑使用I / O高实例的 i3系列中的实例。

    Logstash版本

    您没有说您正在使用哪个版本的Logstash。作为StackOverflow,您可能正在使用5.2。如果是这样,这不是排除方法。

    但是,如果您使用的是2.x系列,则可能首先需要将 -w标志设置为1,然后逐步进行。是的,这是单线程的。但是,ElasticSearch输出在2.x系列中存在一些并发问题,这些问题在5.x系列中已基本解决。

    关于elasticsearch - Elasticsearch批量更新非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42738761/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com