ElasticSearch写入性能优化

ElasticSearch读写性能调优 深层次理解,虽然是每隔一秒就会将内存中的segment数据刷新到segment file中,但实际上这里并没有直接到磁盘文件,而是先写入到OS Cache中。以refresh_interval为间隔时间,将保存在ES 内存缓存区中的数据 刷新到 os的文件系统缓存中,定期清空es的buffer,生成segment。注意:ES 的默认设置,已经综合考虑了数据可靠性,搜索的实时性,写入速度,一般不要盲目修改。将segment刷新到os cache中,并开放了查询权限,以提升搜索的实时性。 阅读详情

ES提高写入性能的目标

增大写吞吐量,越高越好

基本原则

  • 客户端:多线程,批量写
  1. 可以通过性能测试,确定最佳文档数量
  2. 多线程:需要观察是否由HTTP429返回,实现Retry以及线程数量的自动调节
  • 服务器端:先分解问题,在单个节点上测试调整以达到最高吞吐量
  1. 使用更好的硬件(通过观察CPU/IO Block)
  2. 线程切换/堆栈状况

服务器端优化写入性能的一些手段

  • 降低IO操作
  1. 使用ES自动生成的文档ID(可以避免get操作)
  2. 一些相关的ES配置,如Refresh Interval
  • 降低CPU和存储开销

  1. 减少不必要的分词
  2. 避免不需要的doc_values
  3. 文档的字段尽量保证相同的顺序,可以提高文档的压缩率
  • 尽可能做到写入和分片的负载均衡,实现水平扩展
  1. Shard Filering
  2. Write Load Balancer
  • 调整Bulk线程池和队列

索引建模实践(关闭无关的功能)

  • 如果只需要聚合不需要搜索,Index设置成false
  • 如果不需要算分,Norms设置成false
  • 不要对字符串使用默认的dynamic mapping。字段数量过多,会对性能产生较大的影响
  • Index_options控制在创建倒排索引时,哪些内容会被添加到倒排索引中。优化这些设置,一定程度节约CPU
  • 关闭_source,减少IO操作(适合指标型数据,关闭会影响update等操作);
PUT index
{
    "mappings": {
        "properties": {
            "foo": {
                "type": "integer",
                "index": false
             }
        }
    }
}
-------------------------------
PUT index
{
    "mappings": {
        "properties": {
            "foo": {
                "type": "text",
                "norms": false
             }
        }
    }
}

针对性能的取舍

  • 如果需要追求极致的写入速度,可以牺牲数据可靠性及搜索及时性以换取性能
  1. 牺牲可靠性:将副本分片设置为0,写入完毕再调回去
  2. 牺牲搜索及时性:增加Refresh Inteval的时间
  3. 牺牲可靠性:修改Translog的配置

数据写入过程分析

Refresh:将文档先保存在Index Buffer中,以refresh_interval为间隔时间,定期清空buffer, 生成segment, 借助文件系统缓存的特性,先将segment放在文件系统缓存中,并开放查询,以提升搜索的实时性

Translog:segment没有写入磁盘,即便发生了宕机,重启后数据也能恢复,默认配置是每次请求都会落盘

Flush:删除旧的translog文件,生成segment并写入磁盘,更新commit point并写入磁盘,这里一般由ES自动完成,优化空间不大

写入配置优化

Refresh Interval

  • 通过调大数值来降低Refresh的频率,(默认1s ,如果设置为-1 ,会禁止自动refresh),避免生成过多的segment文件,但是会降低搜索的实时性
  • 增大静态配置参数indices.memory.index_buffer_size, 默认10%,会导致自动触发refresh

Translog

降低写磁盘的频率,但是会降低容灾能力

  • Index.translog.durability: 默认为request, 每个请求都落盘。设置成async,异步写入
  • Index.translog.sync_interval设置为60s ,每分钟执行一次
  • index.translog.flush_threshod_size:默认512mb,可以适当调大。当translog超过这个数值会触发flush

分片设定

  • 副本在写入时设为0,完成后再增加
  • 合理设置主分片数,确保均匀分配在所有数据节点上
  • Index.routing.allocation.total_share_per_node:限定每个索引在每个节点上可分配的主分片数量

Bulk,线程池和队列大小

客户端

  • 单个builk请求体的数据量不要太大,官方建议大约5-15mb
  • 写入端的bulk请求超时需要足够长,建议60s以上
  • 写入端尽量将数据轮询到不同节点

服务端

  • 索引创建属于计算密集型任务,应该使用固定大小的线程池来配置,来不及处理的放入队列,线程数应该配置为CPU核数+1,避免过多的上下文切换
  • 队列大小可以适当增加,不要过大,否则占用的内存会导致GC

优化配置DEMO

DELETE myindex
PUT myindex
{
  "settings": {
    "index": {
      "refresh_interval": "30s",//设置30S一次refresh,默认1S
      "number_of_shards": "2"
    },
    "routing": {
      "allocation": {
        "total_shards_per_node": "3" //控制分片,避免数据热点
      }
    },
    "translog": {
      "sync_interval": "30s",   //降低translog落盘
      "durability": "async"
    },
    "number_of_replicas": 0     //避免副本影响(允许丢数据)
  },
  "mappings": {
    "dynamic": false,    //避免不必要的字段索引,必要时可以通过update by query索引必要的字段
    "properties": {}
  }
}

 

更多内容推荐

 

Elasticsearch写入性能优化 性能测试建议 在一个节点的一个分片,不设置副本,测试性能 在完全默认设置上记录性能数据,作为测试的基准线 确保性能测试持续30分钟以上以确认长时间的性能;短时间的测试可能不会碰到segment合并和GC,无法确认这些因素的影响 每次基于默认基准线更改一个参数,如果性能有提升就保留设置,并基于此设置做后续的测试 bulk使用建议 每个请求大小建议在5-15MB,逐步增大测试,当接收到EsRejecte 阅读详情

相关推荐

(Elasticsearch)ES写入性能优化方案

在ES的默认设置下,是综合考虑数据的可靠性,搜索实时性,写入速度等因素的。当离开默认设置,追求极致写入速度时,很多是以牺牲可靠性和搜索实时性为代价的。有时候,业务上对数据可靠性和搜索实时性要求不高,反而对写入速度要求很高,此时可以调整一些策略,最大化写入速度。 综合来说可以从以下几个方面入手: 加大translog flush间隔,目的是降低iops,writeblock (可靠性降低) 加大index refresh间隔,除了降低I/O,更重要的是降低segment merge频率 调整bulk

wangxuelei036的博客 1万+

【大数据开发运维解决方案】ElasticSearc写入查询性能优化总结

ES(ElasticSearch) 我们需要根据公司要求,进行偏向性的优化。1、bulk批量写入2、多线程写入3、修改索引刷新时间4、修改merge参数以及线程数6、index buffer7、磁盘间的任务均衡8、Mapping优化8.1、自动生成docID(避免ES对自定义ID验证的操作) 8.2、调整字段Mapping 8.3、调整_source字段 8.4、禁用_all 8.5、禁用Norms 8.6、index_options设置 9、优化存储

赵延东的一亩三分地 11万+

Elasticsearch的写入性能优化

Elasticsearch写入性能优化关键策略包括:合理设置分片数和副本数(写入期间可临时禁用副本);增大刷新间隔至30秒;使用Bulk API批量写入;优化硬件配置(SSD存储,JVM堆内存不超过物理内存50%);调整操作系统参数(增大文件描述符限制);控制段合并策略与线程数。建议采用冷热数据分离、预分配索引等高级策略,并通过监控工具持续跟踪性能指标。实际应用中需结合业务场景分阶段调整参数,完成写入后恢复副本和刷新间隔等配置。

chunzhi128的博客 952

Elasticsearch 7.X 性能优化

一、ES性能优化 在前面的文章我们系统的对ES进行了讲解,包括rest方式操作ES、集群、水平扩容、常见几种分词器的使用、以及Java客户端的操做,本篇文章我们一起来学习下ES的性能优化。 二、索引刷新频率 refresh_interval 在 elasticsearch 中,写入和打开一个新段的轻量的过程叫做 refresh 。 默认情况下每个分片会每秒自动刷新一次。这就是为什么我们说 elasticsearch 是 近 实时搜索: 文档的变化并不是立即对搜索可见,但会在一秒之内变为可见。 这些行为可能会

小毕超博客 6239

codesys多协议通信之OPC UA通信

测试不易,转载请注明出处!

weixin_44243068的博客 3638

MAX96712在车载摄像头系统中的带宽分配与传输能力计算解析

在计算摄像头带宽与传输接口的关系时,需要考虑视频流的像素分辨率、帧率、颜色深度等因素。以 MAX96712 这种 GMSL2 产品为例,它支持每个链路在正向方向以 3Gbps 或 6Gbps 的固定速率工作。

weixin_43199439的博客 3330

ES索引写入性能优化

最近一直想总结一篇es的优化文章,看了几篇博客,总结一下,方便以后遇上es线上优化问题有参考之处: 1、用bulk批量写入 es批量写入时,应该使用es的bulk写入,bulk写入还是应该考虑es的node数,shard分片数。业务中尽量将写入es的数据聚合起来分批写入。 bulk批量写入的性能比你一条一条写入大量的document的性能要好很多。但是如果要知道一个bulk请求最佳的大小,需要对单...

zhutianrong520的博客 1158

FDTD超表面仿真详细教程,几何相位,共振相位,传播相位

FDTD的超表面主要几何相位型(PB型)和共振型两种类型,其中PB型每个cell中的纳米棒的长宽相同,旋转角度不同,共振型长宽不同,旋转角度相同。本博文中以最常见的长方形纳米棒为例,用FDTD演示两种超表面实现的聚焦透镜的功能,包含详细步骤,其他形状,材料的超表面可自行尝试。

wuyuerhhg的博客 3万+

ES 调优帖:Gateway 批量写入性能优化实践

摘要:Elasticsearch批量写入优化与Gateway实践 本文探讨了Elasticsearch中bulk操作优化及Gateway的补充作用。通过分析bulk操作原理,指出其通过减少网络交互提升效率的局限性,即数据分散时仍会导致分片分发开销。Gateway通过本地计算文档位置,将bulk请求按目标节点重组,避免ES集群内部二次分发,实现更均衡的负载分配。文章设计了两种测试场景(无ID日志写入和带ID搜索场景),对比直接写入ES和使用Gateway转发的性能差异,并提供了完整的测试配置和脚本。测试结果表

infinilabs的博客 1213

利用GBD数据库做未来疾病负担预测

最近看到一篇文献,利用GBD数据库中的数据对疾病负担的发展趋势进行预测。觉得很有趣,就抽空用R语言复盘了一下里面关键的方法。 参考文献: Changing trends in the disease burden of esophageal cancer in China from 1990 to 2017 and its predicted level in 25 years DOI: 10.1002/cam4.3775 1. 相关R包的安装 主要用到的R包有3个,一个一个讲: 1.1 Nordpred

NickyCat的博客 5万+

云计算 | 期末梳理(上)

2024云计算回忆版 && 复盘向梳理

知识库搭建ing 2231

E往无前|腾讯云大数据ES索引原理剖析及写入性能优化最佳实践

本文经过大量案例总结和踩坑复盘,归纳整理了Elastisearch集群在写入性能优化方面一些常用的优化技巧和避坑指南。

cloudbigdata的博客 2280

【NIPS 2022】时序精选论文07|Non-stationary Transformers: 引入非平稳性信息的平稳化序列预测模型(代码解读附源码)

整体代码框架基本上与传统 Transformer 类似,基本上只有在内嵌的注意力机制模块有区别,因此这里只对关键部分进行讲解,代码整体框架可参考 Transformer。非平稳时序很难预测,尤其对模型泛化性影响很大,试想下推理阶段的数据分布变了,模型很难适应这种变化。,比如很早以前的差分就是一种平稳化操作。序列平稳化能增强数据的可预测性,但这时也会带来一个问题,叫。,通过MLP层进行定义,使得参数可学习,以便于更好的融合到注意力网络中。代码中整体注意力的计算方式与原生Transformer类似,

ViolenceTemper的博客 1495

Elasticsearch性能调优之索引写入性能优化

1和2,适合的是,你的es java client程序,可以采取批量写的场景 3,比较通用的,比较合适的是,你对于写入数据到可以读到能够接受比较大的延迟 4,一次性批量导入数据的场景 5/6/7/8/9,通用型,尽量都去做到 1/2/3/4,都是有各自适用的场景,如果场景合适,就尽量用,因为对性能的提升都是很明显的 5/6/7/8/9,其中通用,尽量去优化你的集群,但是其中最重要的,就是3块,...

lm324114的专栏 1506

如何使用 Python 爬虫获取猫眼电影数据:电影评分与评论分析

随着互联网的快速发展,越来越多的人开始使用各种在线平台来了解电影信息,猫眼电影作为一个非常流行的在线电影票务平台,提供了详细的电影评分、评论和票房数据。本篇博客将详细介绍如何使用 Python 爬虫技术获取猫眼电影平台上的电影数据,重点关注电影评分和用户评论的爬取,分析其背后的数据处理和反爬虫技术。如果你对数据分析、电影评论分析等话题感兴趣,可以根据本文的示例进一步深入挖掘更多的数据,为决策提供支持,或为电影产业的相关研究提供有价值的分析依据。有些猫眼电影的页面数据是动态加载的,使用。

2201_76125261的博客 1623

若依框架二次开发——RuoYi-AI 本地部署流程

若依框架二次开发——RuoYi-AI 本地部署流程

bjzhang75的博客 1785

Elasticsearch写入性能优化:从每秒百条到十万条的实战方法

你是否曾遇到Elasticsearch写入速度缓慢,无法满足业务需求的困境?是否在面对海量数据导入时,眼睁睁看着进度条停滞不前?本文将带你深入剖析Elasticsearch写入性能的瓶颈所在,并提供一套经过实战验证的优化方案,帮助你轻松实现写入性能的飞跃。读完本文,你将掌握批量写入、刷新策略、索引设计等关键优化技巧,让你的Elasticsearch集群焕发新生。 ## Elasticsearch...

gitblog_01195的博客 1409

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

es客户端写入性能优化策略:系统学习

深入探讨es客户端在高并发场景下的写入瓶颈,结合批量处理与连接池配置,提升数据摄入效率。掌握核心参数调优方法,让es客户端稳定高效运行。

weixin_42465140的博客 451

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Flink+Elasticsearch实时写入:6大性能优化实战指南

你是否还在为实时数据写入Elasticsearch(ES)时的延迟飙升、吞吐量不足而头疼?当数据量从日均百万级跃升到亿级,普通配置的Flink写入任务往往会出现ES集群过载、Flink Checkpoint超时等问题。本文将通过6个实战优化点,帮你把写入性能提升3-10倍,同时降低70%的资源消耗。读完你将掌握: - 批量写入配置的黄金参数组合 - 并行度与ES集群容量的匹配公式 - 内存缓冲区的...

gitblog_01168的博客 422

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ES写入性能优化

背景: 有1亿多的用户画像中数仓需要导入ES。大多数字段都是sql统计数据,无法区分哪些发生了变化,所以不能增量更新。只能每天全量刷数据。在刷数据的过程中出现了更新缓慢、内存问题。于是做了一些写入优化。 * 解决方案: 1. 读数据 首先要从数仓读取出数据到内存。然后再组装对象去ES刷数据字段比较多而且都需要查询。尝试了一下,即使li...

weixin_33774615的博客 3122

Elasticsearch 写入性能优化有哪些常见手段?

【代码】Elasticsearch 写入性能优化有哪些常见手段?

weixin_45762066的博客 913

PHP写入es数据优化,处理hive写入速度大于elasticsearch接收速度(含Elasticsearch写入性能优化及hive优化 ......

使用hive往elasticsearch的映射外部表中插入数据,报错:Caused by: org.elasticsearch.hadoop.EsHadoopException: Could not write all entries [166/1047616] (maybe ES was overloaded?). Bailing out...分析:ES涉及到该部分源码如下:public voi...

weixin_33609020的博客 731
上一篇: pinpoint字节码增强技术原理
wang_wpw
博客等级 码龄18年 4粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值