一顿骚操作,Elasticsearch写入从3000/s干到8000/s

优化背景:

基于 elasticsearch-5.6.0
机器配置:3 个阿里云 ecs 节点,16G,4 核,机械硬盘

优化前,写入速度平均 3000 条/s,一遇到压测,写入速度骤降,甚至 ES 直接频率 GC、OOM 等;优化后,写入速度平均 8000 条/s,遇到压测,能在压测结束后 30 分钟内消化完数据,各项指标回归正常。

生产配置:

这里我先把自己优化的结果贴出来,后面有参数的详解:
elasticsearch.yml 中增加如下设置:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

索引优化配置:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

优化参数详解

①精细设置全文域:string 类型字段默认会分词,不仅会额外占用资源,而且会影响创建索引的速度。所以,把不需要分词的字段设置为 not_analyzed。

②禁用 _all 字段:对于日志和 apm 数据,目前没有场景会使用到。

③副本数量设置为 0:因为我们目前日志数据和 apm 数据在 es 只保留最近 7 天的量,全量日志保存在 hadoop,可以根据需要通过 spark 读回到 es,况且副本数量是可以随时修改的,区别分片数量。

④使用 es 自动生成 id:es 对于自动生成的 id 有优化,避免了版本查找。因为其生成的 id 是唯一的。

⑤设置 index.refresh_interval:索引刷新间隔,默认为 1s。因为不需要如此高的实时性,我们修改为 30s。扩展学习:刷新索引到底要做什么事情?

⑥设置段合并的线程数量

如下:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

段合并的计算量庞大,而且还要吃掉大量磁盘 I/O。合并在后台定期操作,因为他们可能要很长时间才能完成,尤其是比较大的段。

机械磁盘在并发 I/O 支持方面比较差,所以我们需要降低每个索引并发访问磁盘的线程数。

这个设置允许 max_thread_count + 2 个线程同时进行磁盘操作,也就是设置为 1 允许三个线程。

①设置异步刷盘事务日志文件:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

对于日志场景,能够接受部分数据丢失。同时有全量可靠日志存储在 hadoop,丢失了也可以从 hadoop 恢复回来。

②elasticsearch.yml 中增加如下设置:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

已经索引好的文档会先存放在内存缓存中,等待被写到到段(segment)中。缓存满的时候会触发段刷盘(吃 I/O 和 CPU 的操作)。默认最小缓存大小为 48m,不太够,最大为堆内存的 10%。对于大量写入的场景也显得有点小。

①设置 index、merge、bulk、search 的线程数和队列数

例如以下 elasticsearch.yml 设置:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

②设置 filedata cache 大小

例如以下 elasticsearch.yml 配置:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

filedata cache 的使用场景是一些聚合操作(包括排序),构建 filedata cache 是个相对昂贵的操作。所以尽量能让他保留在内存中。

然后日志场景聚合操作比较少,绝大多数也集中在半夜,所以限制了这个值的大小,默认是不受限制的,很可能占用过多的堆内存。

①设置节点之间的故障检测配置

例如以下 elasticsearch.yml 配置:

一顿骚操作,Elasticsearch写入从3000/s干到8000/s

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

转载作品,原作者:小程序建站,文章来源:https://www.toutiao.com/article/7084257110112125443/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年4月8日 14:43
下一篇 2022年4月12日 15:36

相关推荐

  • 使用nginx部署多个前端项目

    使用nginx部署多个前端项目,基于域名配置,基于端口配置,基于location配置。在正式开始之前,我们先来看一下nginx安装的默认配置文件: /etc/nginx/nginx.conf 文件。

    2022年5月13日
    03020
  • 如何将Kimi接入微信公众号教程

    文章介绍了如何将Kimi接入微信公众号的教程。以及需要使用的工具和具体步骤,包括创建一个bot、选择Kimi作为AI模型、添加功能扩展、绑定微信公众号等。

    2024年5月7日 其它
    01412
  • AI智能助手
  • shopxo升级包3.0.3-4.0.0

    以下目录备份好、plugins_开头的都是插件的附件目录、可以直接使用附件项备份一起操作插件的附件目录 插件目录application/pluginspublic/static/p…

    2023年11月14日
    0564
  • 局域网共享工具CuteHttpFileServer/chfs

    CuteHttpFileServer是一个免费的、HTTP协议的局域网文件共享服务器,使用浏览器可以快速访问下载或者上传,并且速度非常快,在没有数据线的时候,是非常便捷高效的一种文件传输方式。无论是电脑、手机、平板,只要有浏览器,都可以直接访问你这个地址共享的文件或者文件夹,从里面下载共享的文件(文档/照片/音频/视频/电影等等),或者上传文件,而完全无需安装任何客户端 APP 应用。

    2022年8月9日
    07480
  • 一条命令迅速排查大量服务器是否存在Apache Log4j2漏洞风险

    最近,搞IT的小伙伴们我想都知道Apache被爆出来的这个Log4j2远程代码执行漏洞,这个漏洞可以说影响范围极广,危害性非常强,所以大家一定要小心!Apache Log4j2是一…

    2021年12月27日 Linux
    02070
  • shopxo阿里云全国快递物流查询插件

    shopxo阿里云全国快递物流查询插件对接的便是阿里云云市场上卖的最好的全国快递物流查询接口;(与同类产品《阿里云全球物流查询》的区别在于本插件适合国内使用,全球的当然对应全球物流啦),插件适用端:电脑、手机、uniapp小程序,后台只需要配置一个appkey,即可开启使用。

    2024年4月17日 其它
    081

发表回复

登录后才能评论
分享本页
返回顶部