elasticsearch 提高Elasticsearch索引速度的方法?,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 提高Elasticsearch索引速度的方法?,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 提高Elasticsearch索引速度的方法?

elasticsearch 提高Elasticsearch索引速度的方法?,elasticsearch,logstash,elasticsearch,Logstash,我正在设置一个单节点ES来处理来自网络的udp消息,并使用logstash来管道化消息 输入->udp 无过滤器 输出->弹性搜索(单个工人,刷新大小为5000) 对于我运行的所有测试,25k是严重数据包丢失之前每秒的最大事件数。我知道瓶颈不是udp输入或网络,因为当我使用标准输出或文件输出而不是ES时,吞吐量可能高达80k/s 节点为16G/12T(RAID 0),但磁盘为HDD。 我尝试了不同的设置,但无法通过25k EVT/s。我想知道我是否只是遇到了硬件限制,唯一的方法就是使用SSD。

我正在设置一个单节点ES来处理来自网络的udp消息,并使用logstash来管道化消息

输入->udp 无过滤器 输出->弹性搜索(单个工人,刷新大小为5000)

对于我运行的所有测试,25k是严重数据包丢失之前每秒的最大事件数。我知道瓶颈不是udp输入或网络,因为当我使用标准输出或文件输出而不是ES时,吞吐量可能高达80k/s

节点为16G/12T(RAID 0),但磁盘为HDD。 我尝试了不同的设置,但无法通过25k EVT/s。我想知道我是否只是遇到了硬件限制,唯一的方法就是使用SSD。 有人遇到过同样的情况吗?有什么技巧可以让ES以接近标准输出的速度索引吗?以下是我到目前为止所做的尝试(在40秒内发送1M udp PKT,大约为25K/s):

  • 将udp工作进程增加到8-->意识到输入不是问题所在
  • 将ES输出工人增加到2、4、8-->更糟吞吐量,8名工人损失90%。我认为HDD不能很好地处理并发I/O
  • 刷新间隔从1s增加到30s-->略有改善
  • 碎片数1、2、5、10-->无明显改善
  • 以下是我在elasticsearch.yml中添加的内容

    script.disable_dynamic: true
    http.cors.allow-origin: "/.*/"
    http.cors.enabled: true
    action.auto_create_index: false
    bootstrap.mlockall: true
    action.disable_delete_all_indices: true
    cluster.routing.allocation.disk.threshold_enabled: true
    cluster.routing.allocation.node_initial_primaries_recoveries:15
    indices.recovery.concurrent_streams: 4
    index.routing.allocation.disable_allocation: false
    index.merge.scheduler.max_thread_count: 1
    index.store.type: mmapfs
    index.refresh_interval: 60000
    threadpool.bulk.queue_size: 30000
    indices.memory.index_buffer_size: 30%
    index.translog.flush_threshold_ops: 50000
    

    据我所知,最好的方法是将磁盘切换到SSD,这将真正提高您的性能。另一种可能是从单个elasticsearch服务器移动到集群中的多个服务器

    从您的问题中,我看到您已经尝试了一些不太明显的解决方案,如增加工人数量和index.memory.index\u buffer\u size参数,因此这些技巧似乎达到了硬件限制


    我建议使用“sar”或“iotop”工具来验证限制是否真的存在于磁盘中,如果您看到磁盘的利用率达到100%,则没有配置方法来修复它,除非您使elasticsearch更高效地将数据写入磁盘。

    您使用的是什么版本的logstash?你在使用批量api吗?@JoshC。logstash 1.5.3和我的elasticsearch输出中有
    flush\u size=>5000
    ,我假设这告诉它使用批量?您为elasticsearch分配了多少内存?你增加了ulimit设置了吗?@AlainCollins我给了ES 12G:
    ES_HEAP\u SIZE=12G MAX\u LOCKED\u MEMORY=unlimited MAX\u MAP\u COUNT=262144
    我应该尝试增加MAP COUNT吗?这些设置看起来不错,尽管内存越多越好。您是否为打开的文件提高了ulimit?据iotop,ES的写入速度仅为20-30M/s。我对磁盘IO进行了基准测试,它能够以100%的利用率进行1.2G/s的测试,然后我对数据库IO进行了基准测试,这是一种更随机的RW测试,峰值仅为25M/s左右。看起来SSD+perc是一种允许缓存的方式。谢谢