ElasticSearch--优化写入速度的方法--修改配置

这篇具有很好参考价值的文章主要介绍了ElasticSearch--优化写入速度的方法--修改配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文网址:ElasticSearch--优化写入速度的方法--修改配置_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍如何优化ElasticSearch的写入性能。

相关网址

ElasticSearch--写入数据的流程(原理)_IT利刃出鞘的博客-CSDN博客

方案说明

        下边的方案,有的比较推荐改动,有的不推荐改动。不推荐的原因一般是得不偿失,比如:数据容易丢失,查询效率变低等。

tranlog flush(推荐)

改为异步刷新(推荐)

说明

        从ES 2.x开始,translog默认的持久化策略为:每个请求都“flush”(写入磁盘)。对应配置项如下:

index.translog.durability: request

        这是影响 ES 写入速度的最大因素。但是这样写操作比较可靠。如果系统可以接受一定概率的数据丢失(例如:数据写入主分片成功,尚未复制到副分片时,主机断电。由于数据既没有刷到Lucene,translog也没有刷盘,恢复时translog中没有这个数据,数据丢失),则调整translog持久化策略。

优化方案

1.异步写磁盘

index.translog.durability: async

减少刷盘次数(不推荐)

说明

        每30分钟或当translog达到一定大小(由index.translog.flush_threshold_size控制,默认512mb), ES会触发一次flush操作,此时ES会先执行refresh操作将buffer中的数据生成segment,然后调用lucene的commit方法将所有内存中的segment 写(fsync)到磁盘。

优化方案

1.加大translog刷盘间隔时间。默认为5s,不可低于100ms。

index.translog.sync_interval: 120s

2.加大translog刷盘的最大触发值。默认值为512MB。

index.translog.flush_threshold_size: 1024mb

设置为async表示translog的刷盘策略按sync_interval配置指定的时间周期进行。

增大indexing buffer(推荐)

说明

        indexing buffer是为doc建立索引时使用的,当缓冲满时会生成一个新的segment并触发刷盘操作。这是除refresh_interval刷新索引外,另一个生成新segment的机会。

        默认值不太够用,对于大量写入的场景也显得有点小。

        设置的这个index buffer大小,是所有的shard公用的,那些特别活跃的shard会更多的使用这个buffer。对于每个shard来说,最多给512mb,因为再大性能就没什么提升了。

优化方案

1.index_buffer_size(默认为10%,即:JVM堆大小的10%)

indices.memory.index_buffer_size=20%

2.min_index_buffer_size(默认为48m)

indices.memory.min_index_buffer_size=48MB

3.max_index_buffer_size(默认为无限制,一般无需改动

indices.memory.min_index_buffer_size=xxx

增大线程池(推荐)

相关网址:ElasticSearch--线程池(ThreadPool)--使用/设置_IT利刃出鞘的博客-CSDN博客

说明

        大量的写入考虑使用bulk请求。

        Bulk写入索引的过程属于计算密集型任务,应该设置使用固定大小的线程池,来不及处理的任务放入队列。线程池最大线程数量应配置为CPU核心数+1(这也是默认设置),可以避免过多的上下文切换。队列大小可以适当增加,但要严格控制大小,过大的队列会导致较高的GC压力,并可能导致FGC频繁发生。

优化方案

        设置search、write、index、merge的队列长度。线程池大小保持默认就好;一般修改队列大小。

# Search pool
#thread_pool.search.size: 5
thread_pool.search.queue_size: 100

# Write pool
# thread_pool.bulk.size: 16
thread_pool.bulk.queue_size: 300

# Index pool
# thread_pool.index.size: 16
thread_pool.index.queue_size: 300

# 这个参数慎用!强制修改cpu核数,以突破写线程数限制
# processors: 16

减小fielddata(推荐)

说明

        在ES中,text类型的字段使用一种叫做fielddata的查询时内存数据结构。当字段被排序,聚合或者通过脚本访问时这种数据结构会被创建。它是通过从磁盘读取每个段的整个反向索引来构建的,然后存存储在java的堆内存中。

  fielddata默认是不开启的。Fielddata可能会消耗大量的堆空间,尤其是在加载高基数文本字段时。一旦fielddata已加载到堆中,它将在该段的生命周期内保留。此外,加载fielddata是一个昂贵的过程,可能会导致用户遇到延迟命中。这就是默认情况下禁用fielddata的原因。如果尝试对文本字段进行排序,聚合或脚本访问,将看到以下异常:

  “Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.”

        如果要对分词的field执行聚合操作,必须将fielddata设置为true:

POST /test_index/_mapping/test_type 
{
  "properties": {
    "test_field": {
      "type": "text",
      "fielddata": true
    }
  }
}

优化方案

        默认是没有限制的,无限制可能导致频繁的OOM,限制使用则有可能导致频繁的驱逐(eict和relaod)、大量的IO性能损耗,内存碎片,gc。

indices.fielddata.cache.size: 20%

也可以设置为绝对内存比如16g等。超出限制,则会清除内存已有的fielddata。
 

增大refresh interval(不推荐)

说明

        默认情况下索引的refresh_interval为1秒,这意味着数据写1秒后就可以被搜索到,进而满足Elasticsearch的近实时查询。

        每次索引的refresh会产生一个新的Lucene段,会导致频繁的segment merge行为,造成大量的磁盘io和内存占用,影响效率。如果不需要这么高的实时性,应该增大索引refresh周期。

优化方案

1.增大索引refresh周期。(默认为1s)

index.refresh_interval: 30s

段合并(不推荐)

说明

        segment merge操作对系统I/O和内存占用都比较高,merge行为由Lucene控制。相关配置如下:

​index.merge.scheduler.max_thread_count (default Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors()/2)))

index.merge.policy.*

merge策略有三种:

  1. tiered(默认策略):分层合并策略,该策略将大小相似的段放在一起合并,当然段的数量会限制在每层允许的最大数量之中。
  2. log_byte_size:字节大小对数合并策略,将创建由多个大小处于对数运算后大小在指定范围索引组成的索引。
  3. loc_doc:文档数量对数合并策略,与log_byte_size策略类似,只是将以段的字节大小来计算的方式换成了文档数量。

        索引创建时合并策略就已确定,不能更改,但是可以动态更新策略参数。如果堆栈经常有很多merge,则可以考虑适当增加index.merge.policy.segments_per_tier配置的值(该配置指定了每层分段的数量,取值越小则最终segment越少,因此需要merge的操作越多,可以考虑适当增加此值)。同时可以考虑适当降低index.merge.policy.max_merged_segment的值(指定了单个segment的最大容量)。

index.merge.policy.segments_per_tier (default 10,其应该大于等于index.merge.policy.max_merge_at_once。)
index.merge.policy.max_merged_segment (default 5GB)

优化方案

1.修改最大线程数

        最大线程数max_thread_count的默认值是一个比较理想的值,如下:

Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors() / 2))
  1. 如果节点配置的cpu核数较高,merge占用的资源可能会偏高,影响集群的性能。
  2. 如果只有一块硬盘并且非 SSD,则应该把它设置为1,因为在旋转存储介质上并发写,由于寻址的原因,只会降低写入速度。
  3. 如果Elasticsearch写路径配置多个磁盘,可以在磁盘数的范围内结合集群的负载取一个合适的值。

可以通过下面的命令调整某个index的merge过程的并发度:

index.merge.scheduler.max_thread_count:2

2.修改策略参数

        索引创建时合并策略就已确定,不能更改,但可以动态更新策略参数。如果堆栈经常有很多merge,则可以尝试调整以下策略配置:

配置1:

index.merge.policy.segments_per_tier

        该属性指定了每层分段的数量,默认为10,取值越小则最终segment越少,因此想要merge的操作更多,可以考虑适当增加此值。其应该大于等于index.merge.policy.max_merge_at_once(默认为10)。

配置2:

index.merge.policy.max_merged_segment

        指定了单个segment的最大容量,默认为5GB,大于这个大小的segment,不用参与归并(forcemerge 除外)。为了减少参与merge的segment的数量,减少磁盘IO以及内存占用,可以考虑适当降低此值,此场景适用于按天或者时间段建index的场景,当index变为只读后使用forcemerge进行强制归并,在提高检索和Reindex效率的同时,减少内存的占用。

节点探查时间(推荐)

官网网址:Zen Discovery | Elasticsearch Guide [6.6] | Elastic

说明

        大量写入的场景,会占用大量的网络带宽,很可能使节点之间的心跳超时。并且默认的心跳间隔也相对过于频繁(1s检测一次)。

优化方案

discovery.zen.fd.ping_timeout: 60s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s

配置

默认值

描述

ping_interval

1秒

节点ping的频率。

ping_timeout

3秒

等待节点响应的超时时间。

ping_retries

3

ping失败/超时重试次数。文章来源地址https://www.toymoban.com/news/detail-620031.html

到了这里,关于ElasticSearch--优化写入速度的方法--修改配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于MFC的图书馆图书管理系统 VC++操作Excel文档的方法,读取,查询,写入,修改,删除

    VS2017加装MFC以及创建第一个MFC程序_赵满刚的博客-CSDN博客 MFC读取Excel文件+数据处理+写入Excel_土豪gold的博客-CSDN博客 VS2013 MFC连接Access数据库(ADO)详细版实例操作(含Combo Box读取数据库内容,附源码)_土豪gold的博客-CSDN博客_mfc连接access数据库 MFC 导入EXCEL到数据库_weixin_338

    2024年02月06日
    浏览(50)
  • 基于MFC的图书馆图书管理系统 VC++操作Excel文档的方法,读取,查询,写入,修改,删除

    VS2017加装MFC以及创建第一个MFC程序_赵满刚的博客-CSDN博客 MFC读取Excel文件+数据处理+写入Excel_土豪gold的博客-CSDN博客 VS2013 MFC连接Access数据库(ADO)详细版实例操作(含Combo Box读取数据库内容,附源码)_土豪gold的博客-CSDN博客_mfc连接access数据库 MFC 导入EXCEL到数据库_weixin_338

    2024年02月06日
    浏览(49)
  • 项目实战——参数配置化Spark将Hive表的数据写入需要用户名密码认证的ElasticSearch(Java版本)

    项目实战——将Hive表的数据直接导入ElasticSearch    此篇文章不用写代码,简单粗暴,但是相对没有那么灵活;底层采用MapReduce计算框架,导入速度相对较慢! 项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)    此篇文章需要Java代码,实现功能和篇幅类似,直接

    2023年04月08日
    浏览(62)
  • 安装elasticsearch8.9.0及修改配置

    安装es流程 打开文件,添加以下行 vim /etc/sysctl.conf vm.max_map_count=262144 重启生效 sysctl -p 创建用户 useradd es passwd es 修改es目录所属用户 chown -R es:es /opt/elasticsearch-8.9.0 如果内存不足,可以修改es的初始化内存和Max内存,修改文件/opt/elasticsearch-8.9.0/config/jvm.options -Xms8g -Xmx8g 运行e

    2024年02月11日
    浏览(43)
  • Elasticsearch配置优化

    以下的优化基础是安装的 Elasticsearch 版本为 7.17.7,同时jdk版本为 1.8.321 1、jvm参数优化   这里说的jvm参数调优,是指elasticsearch安装目录下的jvm.options配置,如下图所示:   这里调整的内容主要是调整垃圾回收的收集器,将默认的cms + parNew 垃圾回收器,替换为G1 垃圾回收

    2024年02月10日
    浏览(33)
  • Elasticsearch(ES)配置及优化

    在Elasticsearch中,索引的大小和存储能力取决于多个因素,包括文档大小、索引的分片数、硬件规格、查询负载和其他因素。 索引和分片配置:索引和分片的数量和配置会对查询并发性能产生影响。如果索引和分片的数量太少,可能会导致查询性能不佳,而如果数量过多,可

    2023年04月08日
    浏览(43)
  • ElasticSearch服务端及客户端的密码修改配置(可实现)

       前提:我的ElasticSearch版本为7.5.2,是支持密码管理的。对于不支持的es版本可能需求查看一下其他的配置方式。然后我的Java项目是基于Spring Boot 2.3.4版本进行构建的,基于yml修改elastic的配置无法自动注入生效,故进行了手动对es的客户端用户/密码属性进行了填充。 1.首先我

    2024年02月06日
    浏览(33)
  • yolov5 优化方法(四)修改bbox损失函数(补充EIOU,SIOU)

    【参考文档】江大白的yolo解析 后面会给出我的完整代码,先来分段看看! 转换成这种格式: 这个应该都很熟了 clamp inf:无穷大 -inf:负无穷 out:输出,默认即可,不用设定 在 yolov5的使用中,应该是截断掉小于0的部分 torch.clamp 在正式进入各种iou之前 cw :最小外包矩形宽度

    2024年02月06日
    浏览(54)
  • Elasticsearch在部署时,对Linux的设置有哪些优化方法?

    部署Elasticsearch时,可以通过优化Linux系统的设置来提升性能和稳定性。以下是一些常见的优化方法: 1.文件描述符限制 Elasticsearch需要大量的文件描述符来处理数据和连接,所以确保调整系统的文件描述符限制。可以通过修改 /etc/security/limits.conf 文件来增加限制,例如: 2.虚

    2024年02月12日
    浏览(39)
  • ElasticSearch之kibana5.4版本安装及配置教程&kibana修改语言为中文教程

    前言:最近项目在使用es时,使用elastic-head来查看数据对客户来说并不友好,因此需要安装kibana(es的数据可视化工具)。过程中遇到很多问题,网上记录的也比较少,特此记录下。 由于项目使用的es版本比较低5.4.*,因此本文安装kibana是基于kibana 5.4.1版本。 6.7版本之前的ki

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包