elasticsearch Elasticsearch批量更新速度非常慢,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Elasticsearch批量更新速度非常慢,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Elasticsearch批量更新速度非常慢

elasticsearch Elasticsearch批量更新速度非常慢,elasticsearch,logstash,elasticsearch,Logstash,我正在将大量每日数据(每个索引160GB)编入elasticsearch。我面临的情况是,我需要用少量数据(~16GB)更新索引中的几乎所有文档,这些数据的格式是 id1,data1 id1,data2 id2,data1 id2,data2 id2,data3 . . . 我的更新操作开始以每秒16000行的速度进行,在5分钟内,它会下降到每秒1000行,之后不会上升。这16GB数据的更新过程目前比我整个160GB索引所需的时间要长 更新操作的我的conf文件当前如下所示 output {

我正在将大量每日数据(每个索引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
    }

}
根据这里的建议,我在集群中为加快索引速度所做的优化如下

  • 设置“index.store.throttle.type”:“无”
  • 索引“刷新间隔”:“-1”
  • 我正在d2.8XL大型EC2实例的4个实例上运行群集。我已经为每个节点分配了30GB的堆。 虽然更新正在进行,但几乎没有使用任何cpu,负载也非常少

    尽管如此,更新速度还是非常慢。是否有我遗漏的非常明显的东西导致了这个问题?在查看线程池数据时,我发现处理批量操作的线程数量一直很高

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


    提前感谢

    这里有两个例外

    内存压力

    对于244GB的RAM,这种可能性不大,但您仍然可以查看它。在JDK中为您的平台找到
    jstat
    命令,尽管其中有些工具是可视化的。您希望同时检查日志存储JVM和ElasticSearch JVM

    jstat -gcutil -h7 {PID of JVM} 2s
    
    这将为您提供JVM工作时的各种内存池、垃圾收集计数和GC计时的读数。它将每2秒更新一次,每7行打印一次标题。在
    FCT
    中花费过多的时间表明您的堆分配不足

    输入/输出压力

    d2.8XL是一个密集的存储实例,对于高度随机的小数据块工作负载来说可能不是很好。如果您在Unix平台上,
    top
    将告诉您在IOWAIT状态下花费了多少时间。如果它很高,则表示您的存储无法满足发送它的工作负载

    如果是这样的话,您可能需要考虑提供的IOP EBS实例而不是实例本地内容。或者,如果您的东西适合,请考虑<代码> i3一个高I/O实例的实例。 日志存储版本

    你不能说你使用的是什么版本的Logstash。由于StackOverflow,您可能会使用5.2。如果是这样的话,这也不排除


    但是,如果您正在使用2.x系列中的某些内容,您可能希望首先将
    -w
    标志设置为1,然后逐步递增。是的,这是单线程的。但是ElasticSearch输出在2.x系列中存在一些并发问题,这在5.x系列中基本上是固定的。

    对于ElasticSearch版本6.0,我们在aws上遇到了一个完全相同的问题,即更新速度慢,罪魁祸首是I/O速度慢。相同的数据在本地测试堆栈上升级完全正常,但在ec2堆栈上有一次进入云端,在最初几分钟的快速插入之后,一切都在消亡

    本地测试堆栈在内存和cpu方面是一个低规格的服务器,但包含SSD

    s3堆栈是默认gp2 300 IOPS的EBS卷


    将卷转换为3000 IOPS的io1类型解决了问题,一切都回到了正轨。

    我使用的是amazon aws elasticsearch服务版本6.0。我需要从一系列json文件到elasticsearch的100亿项的大量写入/插入。elasticsearch py批量写入速度在大多数情况下都非常慢,偶尔也会出现高速写入。我尝试了各种方法,比如将json文件拆分成小块,多进程读取json文件,并行大容量插入elasticsearch,但都不起作用。最后,在我升级io1 EBS卷之后,一切都以10000次写入IOPS顺利进行

    你用什么语言?听起来你好像有内存泄漏。也许是一个文件没有打开?我面临着同样的问题。我们能解决慢度问题吗?+1对于top和iowait建议,我打赌你会在该区域看到一些超过40的值。话虽如此,我使用的是一个2 data 3主节点设置,其中大部分设置都是普通的弹性设置,它可以以大约1200个文档/秒的速度索引50个字段,总共200个字节。磁盘是EBS(未优化IOPS)。