技巧汇总Elasti

极客

技巧汇总Elasti:我的Elasticsearch实战踩坑与性能调优宝典(附学习通道)

嘿,朋友们!今天咱们不聊虚的,聊聊我最近折腾Elasticsearch的那些事儿,说真的,这玩意儿就像一把瑞士军刀,功能强大得让人上头,但用不好也真能让你头疼到抓狂,我花了好几个通宵,把踩过的坑、试过的招儿全给收拾了一遍,整理出这份 技巧汇总Elasti 实战手册,你要是正在搞日志分析、全文搜索或者数据可视化,答应我,一定要看完,保你少走三个月弯路!

先解决吃饭问题:索引设计的那些小九九

咱们直接开门见山,你有没有遇到过这种场景?明明数据量不大,可查询速度就是慢得像蜗牛爬?我跟你讲,八成是索引设计出了问题!技巧汇总Elasti 的第一条铁律就是:别把ES当关系型数据库用

我记得刚开始接手项目时,看到前人建了个索引,字段类型全用 text,还带了一堆 keyword 子字段,好家伙,那查询慢得,我泡杯咖啡回来结果还没出来!后来我学乖了,遵循这么几个原则:

  1. 字符串字段别冲动:能只做精确匹配的,坚决用 keyword;需要分词搜索的,才用 text,唉,说起来都是泪,我之前就是没分清这俩,导致某个订单号字段被分词,搜索时死活精确匹配不上,差点被业务方骂死。

  2. 禁用动态映射(Dynamic Mapping):这功能看着省心,实则坑人!它可能把你原本想当作 date 的字段,自动映射成 text,导致你后面做时间范围聚合分析时直接报错,那感觉,真是欲哭无泪啊。技巧汇总Elasti 里最实用的一条:提前定义好 Mapping,用 strict 模式,宁可多写几行配置,也别让ES自作聪明。

  3. 分片数不是越多越好:哎呦,这个我太有体会了!以前总以为分片多,并行快,结果搞了60个分片,集群负载直接飙红,查询反而更慢了,单分片建议控制在30-50GB左右,我的经验是5节点集群,单索引用5个主分片就挺稳。

查询优化:让你的搜索“飞”起来

好,索引底子打好了,接下来就是查询优化环节,这部分可太核心了,技巧汇总Elasti 的重点攻略来了!

filter 代替 must

朋友, must 会计算相关性分数,这玩意儿特别吃CPU!如果只是过滤某个状态、某个时间范围,压根不需要算分,我之前有个查询,状态过滤用的 must, QPS 一直上不去,换成 filter 后,缓存命中率翻倍,性能直接起飞,你看,这不就是技巧汇总吗?

深分页要命?用 search_after

老生常谈的问题了。from + size 一页页翻,翻到1万条以后,延迟惨不忍睹,ES官方也推荐用 search_after 来做深度分页,我当时做后台管理系统的列表,数据量上百万,用 search_after 配合唯一排序字段 _id,体验顺滑多了,千万别再用 scroll 做实时查询了哈,那是给大数据量导出用的,懂我意思吧?

小心通配符和正则查询

wildcard 前面带个 ,这查询基本就废了,全表扫描的节奏!我见过有人拿它搜日志里某个中间片段,结果把整个集群CPU打到100%,哎呀,那场面,真是令人窒息!要是真需要模糊匹配,建议用 ngram 分词,虽然索引大了点,但查询效率那是天壤之别。

集群维护与性能调优:这可是看家本领

光会搜还不够,集群得稳定啊!技巧汇总Elasti 接着说基础设施的坑。

你们有没有遇到过 heap 内存一直 90% 以上,然后频繁触发 GC 的情况?我遇到过!那会儿以为是数据量大的问题,后来才发现是某个大字段(比如某个 JSON 字符串)没做 doc_values 禁用,导致内存压力巨大。技巧汇总:对于不需要聚合和排序的字段,果断把 doc_values 设为 false,瞬间内存就解放了。

Segments 数量也是个隐形杀手,经常删改数据,会导致 Segment 碎片化,慢查询频发,我习惯每两周在低峰期手动执行一次 _forcemerge,把 Segment 合并到个位数,这活儿得悠着点,别在业务高峰期干,不然 IO 大概率被打满。

还有 Kafka 对接传输数据时,建议开启 bulk 批量插入,别一条一条地写,我试过,那性能差距是几何级的,用 Bulk API 一次来个 5000 条,吞吐量能提升好几倍,这要是没点实战经验,谁能想到啊?

实战小工具推荐,刀要磨快

技巧汇总Elasti 最后压轴部分,给大家说说我常用的几个配合工具。

  • Elasticvue:比官方自带的 Kibana 开发者工具更轻量,浏览器装个插件就能用,日常查数据看映射,快得飞起。
  • cerebro:查看集群健康状态、做分片分配的老牌工具了,可视化程度很高,适合在大屏上监控,看着就安心。
  • 常用聚合必会Cardinality 做去重计数(注意精度),Date Histogram 时间分组,这些都是看家功能,用好了能省不少事。

写在最后

好了,这些就是我为兄弟萌准备的 技巧汇总Elasti 精华版,讲真,ES这块的知识点实在是海了去了,今天讲的这些都是我实际项目里摔打出来的经验,希望能给大家一个启发,实践出真知!你要是也遇到什么奇葩问题,或者想了解更多关于分布式日志系统的玩法,欢迎随时来交流心得。

对了!如果你也是刚入门或者想进阶学习网络安全、服务器运维相关的知识,学习网络安全可以加QQ:10001!咱们群里见,一起讨论技术,一起避坑!

技巧汇总Elasti

觉得这篇文章对你有帮助的话,别忘了点个赞、转个发,让更多朋友看到这份技巧汇总!咱们下篇干货见啦~

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码