elasticsearch 提高Elasticsearch索引速度的方法?
我正在设置一个单节点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):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。
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是一种允许缓存的方式。谢谢