Elasticsearch 线上实战问题及解决方案探讨

这篇具有很好参考价值的文章主要介绍了Elasticsearch 线上实战问题及解决方案探讨。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、reindex相关问题

1.1 问题描述

我有 1tb 的一个大索引若干,要迁移到另外一个新集群去,有没有好办法?reindex好像会中断......

reindex 是不是就算设置了频率也会莫名的中断,而且没地方查到错误?1000多万的数据,大概80G  用reindex有时候都会莫名的断。

有时候是全的,有时候不全。

https://t.zsxq.com/14pVGxDdv

Elasticsearch 线上实战问题及解决方案探讨,elasticsearch,大数据,搜索引擎,全文检索

1.2 问题认知

对于大型索引的迁移问题,迁移 1TB 大小的索引,尤其是在保持服务不中断的情况下,是一项挑战。

Reindex 操作本质上是 Elasticsearch 提供的高级复制,它会从源索引读取文档并写入目标索引。对于大型索引,这可能成为一个瓶颈,因为它需要大量的IO和网络带宽。

反馈和问到最多的问题就是:Reindex 支不支持断点续传?

其实,Reindex确实不提供原生的断点续传功能。如果过程中断,则需要重新开始或者手动管理已经完成的部分。

1.3 解决方案

1.3.1 数据规模和数据量不大,推荐使用 reindex。

注意事项如下:

  • 1、集群足够健康。确保集群健康状况良好,没有过载或者资源争夺情况。

  • 2、用好 slice,提高并行效能。

使用_reindex API时,通过设置 scroll 和 batch_size 参数来管理内存使用和单批次的文档数量。使用 slice 功能来并行化reindex任务。

  • 3、避免中断策略

在Elasticsearch配置中调整连接和超时设置,例如

reindex.remote.connect_timeout
reindex.remote.read_timeout
  • 4、自己维护校验机制。

迁移完成后,使用校验和或者文档计数来确认数据完整性。

之前实战项目中,可以定时脚本统计一下写入新索引的数据量,以校验源和目的端数据的一致性。

1.3.2 数据规模和数据量巨大,推荐使用快照或者 logstash 等工具。
  • 1、快照和恢复机制 创建一个源索引的快照,并将其恢复到新集群。这通常比 reindex 操作更加可靠。

  • 2、logstash 同步 支持两种类似断点续传机制,一是:基于自增ID同步,另一是:基于自增时间同步。

  • 3、canal 同步 如果源头是 MySQL、Oracle 等关系型数据库,推荐使用阿里开源的 canal 工具同步。

https://github.com/alibaba/canal

2、 如何记录es的所有请求日志?

https://t.zsxq.com/14ccO0rEr

2.1 问题认知

这是经常被问到的问题,默认情况下 Elasticsearch 输出核心是 error 日志,以方便我们窥探集群哪里出了问题。

但,有些业务场景,需要全量日志,包含但不限于检索日志细节等。

这时候,默认机制便不再生效。

2.2 问题解决

打开 slowlog,便可以查看全量日志。

PUT packets-2022-12-14/_settings
{
"index.indexing.slowlog.threshold.index.debug": "0s",
"index.search.slowlog.threshold.fetch.debug": "0s",
"index.search.slowlog.threshold.query.debug": "0s"
}

更多推荐:Elasticsearch 日志能否把全部请求打印出来?

3、脚本的使用问题

3.1 问题描述

我想请问下我用kibana中的无痛脚本编写创建新的字段时想要创建一个list数据表,输入下面这段代码,但是平台却显示无法识别new ArrayList是什么原因呢?

List(String)mylist= new ArrayList<>()

https://t.zsxq.com/142Q4X8mp 

https://t.zsxq.com/14rq91spR 

https://t.zsxq.com/14c0vh6ND

3.2 问题认知

Elasticsearch painless 脚本功能的确非常强大,但非必要不要使用。原因在于后期的性能问题。

3.3 问题解决

  • 1、首先,写入的时候充分建模。

能前置写入的时候处理的话,尽量前置处理。借助写入语言:Java、Python 等处理完毕后再写入。

  • 2、其次,写入前借助 Ingest pipeline 预处理。

Ingest pipeline 是写入前预处理的锋利的“瑞士军刀”,功能也非常强大,5.X版本就已经推出,可以大胆的用起来。

Elasticsearch 线上实战问题及解决方案探讨,elasticsearch,大数据,搜索引擎,全文检索

写入的时候处理,可能会写入变慢,总比:检索响应慢更容易让客户接受。

与之并驾齐驱的还可以借助 :logstash filter 环节实现预处理过滤功能。

  • 3、再次,检索的时候使用:runtime_field 动态字段实现。

这是迫不得已的下策,需要结合场景选用。

此方案也比自己写脚本来得更为实际。

4、集群相关问题

4.1 问题描述

请问大佬,集群扩容,新加入的节点需要把原集群机器中的data目录拷贝到新加入的节点中吗?还是新节点直接空data目录加入即可?再就是,linux和windows 的 ES可以互相加入彼此的集群中吗?谢谢

https://t.zsxq.com/14EuMm1Q7

4.2 问题认知

凡是涉及到直接拷贝data目录的多半都是官方不推荐的冒险方案,非特殊情况都不建议这么做。

4.3 解决方案

其一:了解副本的原理、路由机制原理,可以知道,新写入的数据会根据路由落到某个节点的某个分片,然后,复制到其他的副本分片中去。这样手动迁移data的必要性和可能性都不存在了。

其二:当然可以,windows 和 linux 本就是平台的不同,但都可以作为节点的宿主机。Elasticsearch 本来就是 java 开发的,支持跨平台。

5、自定义词典问题

5.1 问题描述

中文分词字段,如何实现不同字段使用不同的自定义词典?

https://t.zsxq.com/14QYEGCu7

5.2 问题认知

这是一种小众业务场景问题。

一般咱们企业级应用更多的是一类业务敲定一个分词器,往往在分词器的细粒度等问题做文章。比如:如何动态扩展词库?如何丰富已有词库?

5.3 解决方案

如果非要不同字段不同字典,其实最直接方案,可以导入多个分词插件。

比如:引入 IK 分词插件同时引入结巴分词插件。这样就可以很好得解决。

但,我验证了一下,仅 IK 扩展支持两套分词词典,貌似不改变源码不具备可行性。

推荐一个支持多词库的源码修改过的 IK 解决方案。

“改造前,所有索引使用一个词库,没办法针对不同索引添加不同词库, 改造后,词库的加载由索引中自定义的analyzer配置时,设置的词库而决定 从而实现了,不同业务的索引使用不同的词库。”

https://github.com/PeterMen/elasticsearch-analysis-ik

推荐阅读

  • 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  • 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  • 如何系统的学习 Elasticsearch ?

  • 那些 ChatGPT4 也搞不定的 Elasticsearch 问题,请抛给我们!

Elasticsearch 线上实战问题及解决方案探讨,elasticsearch,大数据,搜索引擎,全文检索

更短时间更快习得更多干货!

中国50%+Elastic认证专家出自于此!

Elasticsearch 线上实战问题及解决方案探讨,elasticsearch,大数据,搜索引擎,全文检索

比同事抢先一步学习进阶干货!文章来源地址https://www.toymoban.com/news/detail-752079.html

到了这里,关于Elasticsearch 线上实战问题及解决方案探讨的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch解决不能修改索引、字段问题解决方案

    问题1: 由于es索引不能删除,不能修改,在不影响原数据的情况下,并且生产服务不停机的情况下,怎么修改索引,并保留原索引内的数据? 基于kibanna的dev Tools执行参数,淘汰postman,kibanna会有提示 1、原来索引起别名job 2、重建索引,数据迁移,默认是同步执行大数据量太

    2024年02月12日
    浏览(44)
  • Elasticsearch 聚合数据结果不精确问题解决方案

    近期我们项目中出现使用ES聚合某个索引的数据取TOP 10的数据和相同条件下查询所有数据然后按数据量排序取的TOP 10的数据不一致的问题。 下面我们简单分析一下这个问题,列出一些常见的解决方案。 Elasticsearch分片机制 Elasticsearch索引(index)有一个主分片(primary shard)和

    2024年02月11日
    浏览(40)
  • 安装Elasticsearch步骤(包含遇到的问题及解决方案)

    注: 笔者是在 centos 云服务器环境下安装的Elasticsearch 目录 1.安装前准备 2.下载Elasticsearch  3.启动Elasticsearch 非常容易出问题  第一次运行时,可能出现如下错误: 一、内存不足原因启动失败 二、使用root用户启动问题 三、启动ES自动被killed 四、max virtual memory areas vm.max_map_c

    2024年02月06日
    浏览(64)
  • 使用Docker安装和部署Elasticsearch出现问题以及解决方案

    docker安装elasticsearch(最详细版)| Bright1668-CSDN es在Windows环境启动报错 | 你道本部院是个书生-CSDN 查看max_map_count的值 默认是 65530 。 重新设置max_map_count的值。 –name es:设置容器的名称为\\\"es\\\"。 -p 9200:9200 -p 9300:9300:这部分将主机的端口与容器的端口进行映射。 -e “discovery.ty

    2024年02月09日
    浏览(58)
  • Elasticsearch部署中的两大常见问题及其解决方案

    随着大数据和实时搜索的日益普及,Elasticsearch已经成为现代应用中不可或缺的工具。但是,像所有软件一样,部署和配置Elasticsearch可能会遇到一些问题。本文将探讨两个我最近遇到的常见问题及其解决方案。 在启动Elasticsearch时,我遇到了以下错误: failed to resolve host [“l

    2024年02月06日
    浏览(54)
  • Elasticsearch 8.X 聚合查询下的精度问题及其解决方案

    咕泡同学提问:我在看runtime文档的时候做个测试, agg求avg的时候不管是double还是long,数据都不准确,这种在生产环境中如何解决啊? 上述问题可以归类为:Elasticsearch聚合查询下的 精度 问题。 在日常的数据处理工作中,我们经常会遇到使用Elasticsearch进行大数据查询、统计

    2024年02月16日
    浏览(37)
  • ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案

    目录 一、DSL 查询文档语法 前言 1.1、DSL Query 基本语法 1.2、全文检索查询 1.2.1、match 查询 1.2.2、multi_match 1.3、精确查询 1.3.1、term 查询 1.3.2、range 查询 1.4、地理查询 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、复合查询 1.5.1、相关性算分 1.5.2、function_score 1.5.3、boolean query 1.6、搜索

    2024年02月07日
    浏览(50)
  • 【方案探讨】 出现java.io.IOException解决方法

    欢迎来到我的博客!在这里,我将分享我对问题的独特见解和解决方案。通过这篇博客,我希望能够为您带来新的思考方式,启发您寻找问题的不同角度,并探索创新的解决方案。 每个问题都是一个机会,是一个学习的过程。在这里,我将分享我对问题的思考过程和解决方案

    2024年04月25日
    浏览(49)
  • 《Spring》--使用application.yml特性提供多环境开发解决方案/开发/测试/线上--方案1

            有不少同志有疑问说我正常开发的时候,需要自己搭建项目的时候。总是出现配置文件环境切换出现问题。多环境系列会出两个文章解决给搭建重点解决一下这个问题。给与两种解决的方案。正确让大家只需要按照步骤操作就可以完成。         通过pom文件maven指示

    2024年01月22日
    浏览(42)
  • 《Spring》--使用application.yml特性提供多环境开发解决方案/开发/测试/线上--方案2

            第二种多环境的配置选择解决方案,这个更加的灵活没在配置方面都选择了一种yml的书写方式。 在Spring Boot中, spring.profiles.active  属性用于指定当前应用程序应激活哪个环境配置。当Spring Boot应用启动时,它会读取应用的配置文件(通常是application.properties或applica

    2024年01月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包