我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Elasticsearch常见的5个错误及解决策略是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Elasticsearch常见的5个错误及解决策略是什么

这期内容当中小编将会给大家带来有关Elasticsearch常见的5个错误及解决策略是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1、采用动态Mapping

如果不定义Mapping,Elasticsearch会根据输入的数据,创建对应的Mapping,这看起来非常完美,但是Elasticsearch的动态Mapping并不总是精确的。
动态Mapping对于入门很有用,但在某些时候您需要结合业务数据指定Mapping。

举例1:5.x版本之后,需要分词的字段需要设定text类型和对应的analyzer ;仅需要精确匹配的可直接设置为keyword类型。
举例2:长文本高亮需要在text类型的基础上,设置fast-vector-highlighter高亮方式,高亮效率能提升20倍以上。

2、聚合设置不当导致OOM

在某些聚合中,没有足够的内存来支持复杂的嵌套聚合,导致聚合结果超时甚至OOM

聚合爆炸是计算问题,可能导致某些聚合的桶生成呈指数增长,并可能导致不受控制的内存使用。

Elasticsearch“terms”字段根据您的数据构建存储桶,但无法预测将提前创建多少存储桶。 对于由多个子聚合组成的父聚合,这可能会有问题。 组合每个子聚合中的唯一值可能会导致创建的桶数量大幅增加。

我们来看一个例子。

假设您有一个代表运动队的数据集。 如果你想特别关注那支球队的前10名球员和以及他们的支持球员,那么聚合将如下所示

1{
2"aggs" : {
3"play_aggs" : {
4"terms" : {
5"field" : "players",
6"size" : 10
7},
8"aggs" : {
9"other_aggs" : {
10"terms" : {
11"field" : "players",
12"size" : 5
13}
14}
15}
16}
17}
18}

聚合将返回前10名球员的列表以及每位顶级球员的前五名支持球员的列表 - 这样总共将返回50个值。这个看上去简单的查询可以轻而易举地消耗大量内存。

terms聚合可以显示为使用每个级别的桶的树。因此,以上聚合中每个顶级球员的桶将构成第一级,而另一个聚合中的每个支持球员的桶将构成第二级。因此,一个团队将生产n²桶。想象一下,如果您拥有5亿个文档的数据集会发生什么

Collection Mode用于帮助控制子聚合的执行方式。聚合的默认Collection Mode称为深度优先,首先需要构建整个树,然后修剪边缘。虽然深度优先是大多数聚合的适当收集模式,但它不适用于上面的运动员聚合示例。因此,Elasticsearch允许您将特定聚合中的收集模式更改为更合适的方式。

诸如上面的示例之类的规范应该使用广度优先收集模式,该模式一次构建和修剪树一级以控制聚合爆炸。 此收集模式极大地帮助减少消耗的内存量并保持节点稳定。

1{
2"aggs" : {
3"play_aggs" : {
4"terms" : {
5"field" : "players",
6"size" : 10,
7"collect_mode" : "breadth_first"
8},
9"aggs" : {
10"other_aggs" : {
11"terms" : {
12"field" : "players",
13"size" : 5
14}
15}
16}
17}
18}
19}

推荐阅读:http://t.cn/RHndSgY

3. ES索引设置不当

3.1 集群名称配置

ES启动的默认群集名称称为elasticsearch。 如果群集中有许多节点,最好保持命名标志尽可能一致,例如:

1cluster.name:app_es_production
2node.name:app_es_node_001

3.2 集群恢复设置

节点的恢复设置也很重要。 假设群集中的某些节点由于故障而重新启动,并且某些节点在其他节点之后重启。 为了使所有这些节点之间的数据保持一致,我们必须运行一致性程序,以使所有集群保持一致状态。

举例1:只要10个数据或主节点已加入群集,即可恢复。

1gateway.recover_after_nodes:10

举例2:集群中期待启动节点达到20个以及时间超过7分钟后,集群重启或恢复。

1gateway.expected_nodes:20
2gateway.recover_after_time:7m

使用正确的配置,可能需要数小时的恢复缩减到只需要分钟级,极大提高工作效率。

3.3 防脑裂配置

minimum_master_nodes对于群集稳定性非常重要。 它们有助于防止脑裂。
此设置的建议值为(N / 2)+ 1 , 其中N是候选主节点的节点数。
有了这个,如果你有10个可以保存数据并成为主数据的 候选主节点,那么该值将是6。
如果您有三个专用主节点和1,000个数据节点,则该值为两个(仅计算候选主节点):
discovery.zen.minimum_master_nodes:2

4、集群不做规划,遇到问题再说

1“我需要多少存储空间、多大的内存?”是用户经常问自己的问题。

遗憾的是,没有固定的公式,但可以采取某些步骤来协助规划资源。
推荐方法:模拟实际用例。
步骤1:创建ES集群。
步骤2:使用与生产设置所需的数据速率几乎相同的数据。
步骤3:启动节点,用真实文档填充它们,然后推送填充数据到索引分片。

在模拟实际用例过程中了解资源利用率非常重要,因为它允许您为节点保留适当的RAM量,配置JVM堆空间并优化整个测试过程。

根据模拟结果,决定实际集群的内存、CPU、磁盘容量。

5、线程池设置不合理

ES节点具有许多线程池,以便改进节点内线程的管理方式。 但是每个线程可以处理多少数据存在限制。 要跟踪此值,我们可以使用ES属性:

1threadpool.bulk.queue_size:2000

这会向ES通知分片中的请求数,当没有可用于处理请求的线程时,新请求可以在节点中排队等待执行。 如果任务数高于此值,您将获得RemoteTransportException。 该值越高,节点机器上所需的堆空间量就越大,并且JVM堆也将被消耗。
此外,你应该在代码的开发阶段做好异常处理。

注意:ES官网不建议修改此值。

Elasticsearch的使用过程中总会遇到这样、那样的问题,多总结、多思考,形成针对业务场景的有效的解决方案。
同时,也要多吸取国内外社区、论坛、博客中的精华,取长补短。

注意:网络文献一般没有涉及版本,老版本ES一些配置不一定适用于6.X最新版本,但,底层的技术永远不过时。

上述就是小编为大家分享的Elasticsearch常见的5个错误及解决策略是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Elasticsearch常见的5个错误及解决策略是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Elasticsearch常见的5个错误及解决策略是什么

这期内容当中小编将会给大家带来有关Elasticsearch常见的5个错误及解决策略是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、采用动态Mapping如果不定义Mapping,Elastics
2023-06-04

5 个常见 Discuz 密码错误原因及解决方案!

5 个常见 Discuz 密码错误原因及解决方案!随着互联网的高速发展,Discuz 论坛系统成为了许多网站建设者的首选,它简单易用,功能强大,深受广大网站管理员的喜爱。然而,在使用 Discuz 过程中,很多用户都会遇到密码错误的问题,
5 个常见 Discuz 密码错误原因及解决方案!
2024-03-03

win7组策略错误的原因及解决方法是什么

Win7组策略错误可能有以下几个原因:其他设置冲突:如果存在多个组策略设置,可能会导致冲突,从而引发错误。缺少或损坏的文件:如果系统中缺少或损坏了与组策略相关的文件,可能会导致组策略错误。权限问题:如果没有足够的权限来访问或修改组策略设置,
2023-10-22

PHP中常见错误类型及其解决方法是什么

本篇内容介绍了“PHP中常见错误类型及其解决方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 语法错误语法错误是最常见的错误之一
2023-07-05

JavaScript常见的五个内存错误是什么

这篇文章主要介绍“JavaScript常见的五个内存错误是什么”,在日常操作中,相信很多人在JavaScript常见的五个内存错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript常见的
2023-06-26

thinkphp3.2中的常见错误和解决方法是什么

本篇内容主要讲解“thinkphp3.2中的常见错误和解决方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp3.2中的常见错误和解决方法是什么”吧!1.404错误返回当我们
2023-07-05

Python常见报错及解决方法是什么

这篇文章主要介绍“Python常见报错及解决方法是什么”,在日常操作中,相信很多人在Python常见报错及解决方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python常见报错及解决方法是什么”的疑
2023-07-06

大数据安全5个问题和解决策略分别是什么

大数据安全5个问题和解决策略分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  商业智能是企业界的流行词。为了实现所述的智能,采用算法和预测分析,并且对
2023-06-02

JAVA语言的十个常见误解是什么

这篇“JAVA语言的十个常见误解是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JAVA语言的十个常见误解是什么”文章吧
2023-06-03

常见的Maven报错原因是什么及怎么解决

这篇文章主要介绍“常见的Maven报错原因是什么及怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“常见的Maven报错原因是什么及怎么解决”文章能帮助大家解决问题。报错:No compiler
2023-06-29

SSL证书常见的错误和解决办法是什么呢

本篇文章给大家分享的是有关SSL证书常见的错误和解决办法是什么呢,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 SSL证书安装过程以及安装完毕之后可能会由于这样或者
2023-06-04

Python中的异常处理的最佳实践和错误处理策略是什么?

Python中的异常处理的最佳实践和错误处理策略是什么?异常处理是一种重要的编程技巧,可以帮助我们优雅地处理程序中的错误。在Python中,异常是指在程序执行过程中出现的错误、意外或异常情况。当出现异常时,Python会抛出一个异常对象,我
2023-10-22

PHP服务器报错的常见类型及解决方法是什么

今天小编给大家分享一下PHP服务器报错的常见类型及解决方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Syntax
2023-07-05

keepalived 1.3.5的常见配置是什么以及常见问题的解决方法

keepalived 1.3.5的常见配置是什么以及常见问题的解决方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. keepalived配置及说明1.1
2023-06-05

常见的SpringMVC故障排查及解决方案是什么

本篇文章给大家分享的是有关常见的SpringMVC故障排查及解决方案是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、前言相信我们每个人在SpringMVC开发中,都遇到
2023-06-05

laravel报500错误的原因是什么及怎么解决

本文小编为大家详细介绍“laravel报500错误的原因是什么及怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“laravel报500错误的原因是什么及怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-05

sublime写PHP遇到的常见问题及解决方法是什么

这篇文章主要讲解了“sublime写PHP遇到的常见问题及解决方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sublime写PHP遇到的常见问题及解决方法是什么”吧!问题1:片段无
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录