当前位置: 首页 > news >正文

Elasticsearch基础优化

分片策略

分片和副本得设计为ES提供支付分布式和故障转移得特性,但不意味着分片和副本是可以无限分配,
而且索引得分片完成分配后由于索引得路由机制,不能重新修改分片数(副本数可以动态修改)

  • 一个分片得底层为一个lucene索引,会消耗一定文件句柄、内存以及CPU运转,当分片数越多资源消耗就会更多
  • 每个搜索请求都需要命中索引中得每个分片,如果分片处于不同节点还好,但如果处于相同节点上竞争使用相同资源就导致性能降低
  • 控制每个分片占用磁盘容量不超过ES得最大JVM堆空间设置(一般不超过32G),因此如果索引得总容量在500G左右,那么分片大小在16个左右即可
  • 考虑node数量,一般一个节点有时就是一台物理机,如果分片数量过多,大大超过节点数,可能会导致一个节点上存在多个分片,一旦该节点故障,即使保持1个以上得副本,同样有可能会导致数据丢失,一般设置分片数不超过节点数得3倍
  • 主分片,副本和节点最大数之间数量 节点数<=主分片数*(副本数+1)

推迟分片分配

对于节点瞬时中断得问题,默认情况,集群会等待一分钟来查看节点是否重新加入,如果节点再次期间重新加入,重新加入得节点会保持其现有分片得数据,不会触发新的分片分配,这样就可以减少ES在自动在平衡可用分片所带来的极大开销
通过修改参数delayed_timeout,延长在均衡时间,可全局设置也可以在索引级别修改

PUT /_all/_settings
{"settings" : {"index.unassigned.node_left.delayed_timeout" : "5m"}
}

路由选择

当我们查询文档时,ES是如何知道一个文档应该存放在那个分片中,路由计算

#shard=hash(routing) % number_of_primary_shards

routing默认值是文档 id,也可以采用自定义值,比如用户id

  • 不带routing查询
    请求到达协调节点上,协调节点查询分发到所有分片上,协调节点搜集每个分片得查询结果,再将查询结果排序聚合,返回结果
  • 带routing查询
    查询可直接根据routing信息定位到某个分片查询,不需要查询所有分片,经过协调节点排序,比如自定义用户查询,如果routing设置为userid,就可以直接查询出数据,效率提升

写入速度

ES默认配置,综合数据可靠性、写入速度、搜索实时等因素,实际使用我们需要根据项目要求,进行偏向性优化。
针对搜索性能不高,但是写入有要求场景,需要尽可能得选择恰当写优化策略

  • 加大Translog Flush,降低磁盘 Iops、Writeblock
  • 增加Index Refresh 刷新间隔,减少Segment Merge次数(间隔短意味频繁将内存数据放入文件系统缓存中,文件系统缓存相应写入磁盘中,当磁盘文件数据多就会合并随之影响性能)
  • 调整Bulk线程池和队列(批量处理)
  • 优化节点间得任务分布
  • 优化Lucene层索引建立,降低CPU和IO

优化存储

ES是一种密集使用磁盘得应用,在段合并时候会频繁操作磁盘,所以对磁盘要求较高,当磁盘速度提升,集群整体性能大幅提高(固态硬盘)

减少Refresh次数

#Lucene是一个开源的全文索引与信息检索(IR)库,采用Java实现

Lucene在新增数据时,采用延迟写入策略,默认情况下索引得refresh_interval为1秒
Lucene将代写入得数据先写到内存中,超过默认1秒会触发一次refresh,然后refresh会把内存得数据刷新到操作系统得文件缓存系统中。

  • 如果对搜索得实效性不高,可以将refresh周期延长调整30秒等
  • 有效减少刷次次数,意味着需要消耗更多得Heap内存

加大Flush设置

#Translog是Elasticsearch的事务日志文件,它记录了所有对索引分片的事务操作(add/update/delete),每个分片对应一个Translog文件。
#Translog是用来恢复数据的。在Elasticsearch中,写入的索引并没有实时落盘到索引文件,而是先双写到内存和Translog文件。如果掉电,Elasticsearch重启后还可以把数据从日志文件中读回来。在flush的时候,Translog文件会被清空

Flush主要目的是把文件缓存系统中得段持久化到磁盘,当Translog得数据量达到512MB或者30分钟,会触发一次Flush

减少副本数量

ES为了保证集群得可用性,提供了Replicas支持,然后每个副本也会执行分析,索引及可能合并得过程,所以Replicas得数量严重影响写索引得效率。
当写索引时,需要把写入数据都同步到副本节点,副本节点越多,写索引得效率就越慢,如果有大批量进行写入操作,可以先禁止Replca副本复制,设置index.number_of_replicas:0关闭副本,再写入完成后,Replca修改回正常状态,提升效率

内存设置

ES在默认安装后设置得内存是1GB,对于任何一个业务来说,这个设置都太小了。config目录文件包含一个jvm.option文件,添加如下命令设置ES堆大小,Xms表示堆初始大小,Xmx表示可分配得最大内存。
一般来说这两数值配置保持相同,目的为了能够在java垃圾回收机制清理完堆分区后不需要重新分割计算堆区得大小而浪费资源,可以减轻伸缩堆大小带来得压力。

  • 不要超过物理内存得50%,Lucene设计目的是把底层得OS里得数据缓存到内存中。
    Lucene得段分别储存到单个文件中的,这些文件都是不会变化得,所以很利于缓存,同时操作系统也会吧这些文件缓存起来,以便更快得访问
    如果我们设置堆内存过大,Lucene可用得内存将减少,会影响降低Lucene得全文本查询性能
  • 堆内存大小最好不超过32GB,在java中,所有的对象都分配在堆上,然后有一个Klass pointer指针向它得类元数据
    假设有个机器有128GB内存,你可以创建2个节点,每节点内存分配不超过32GB,也就是不超过64GB内存给ES堆内存,剩下超过64GB得内存给Lucene

重要配置

参数参数值说明
cluster.nameES配置ES集群名称,默认值是ES,ES会自动发现在同一网段下集群名称相同得节点
node.namenode1集群中节点名,在同一集群中不能重复,节点名称一单设置不能在改变
node.mastertrue指定该节点是否有资格被选举为Master节点,默认为True,具体能否成为Master节点,需要通过选举产生
node.datatrue执行该节点是否存储索引数据,默认为True,数据的增、删、改、查都是在Data节点完成
index.number_of_shards1设置索引分片个数,默认是1。可以在创建索引时设置该值,具体设置多少根据数据量大小来定,如果数据量不大,保持默认1时效率最高
index.number_of_replicas1设置默认索引副本个数,默认为1,副本越多,集群可用性越好,但是写索引时需要同步得数据随之越多
transport.tcp.compressfalse设置在节点间传输时是否压缩,默认为False,不压缩
discovery.zen.minimum_master_nodes1设置在选举Master节点时需要参与最少候选主节点数,默认1,如果使用默认值,则当网络不稳定时有可能出现脑裂。合理数值为(master_eligible_nodes/2)+1,其中master_eligible_nodes表示集群中候选主节点数
descovery.zen.ping.timeout3s设置在集群中自动发现其他节点时ping连接超时时间,默认为3秒,在较差得网络环境需要设置大一点,防止因误判该节点存活状态而导致分片转移

相关文章:

Elasticsearch基础优化

分片策略 分片和副本得设计为ES提供支付分布式和故障转移得特性&#xff0c;但不意味着分片和副本是可以无限分配&#xff0c; 而且索引得分片完成分配后由于索引得路由机制&#xff0c;不能重新修改分片数&#xff08;副本数可以动态修改&#xff09; 一个分片得底层为一个l…...

【Amazon】通过直接连接的方式导入 KubeSphere集群至KubeSphere主容器平台

文章目录 一、设置主集群方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 二、在主集群中设置代理服务地址方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 三、登录控制台验证四、准备成员集群方式一&#xff1a;使用 Web 控制台…...

三数之和问题

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1&…...

【JavaEE】多线程 (2) --线程安全

目录 1. 观察线程不安全 2. 线程安全的概念 3. 线程不安全的原因 4. 解决之前的线程不安全问题 5. synchronized 关键字 - 监视器锁 monitor lock 5.1 synchronized 的特性 5.2 synchronized 使⽤⽰例 1. 观察线程不安全 package thread; public class ThreadDemo19 {p…...

关于点胶机那些事

总结一下点胶机技术要点&#xff1a; 1&#xff1a;不论多复杂的点胶机&#xff0c;简单点&#xff0c;可以简化为&#xff1a;1&#xff1a;运控 2&#xff1a;点胶&#xff0c;3&#xff1a;检测 运控的目的就是负责把针头移到面板对应的胶路上&#xff0c;点胶即就是排胶&…...

Python | CAP - 累积精度曲线分析案例

CAP通常被称为“累积精度曲线”&#xff0c;用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点&#xff0c;我们在图中绘制了三条不同的曲线&#xff1a; 一个随机的曲线&#xff08;random&#xff09;通过使用随机森林分类器获得的曲线…...

ubuntu22.04安装swagboot遇到的问题

一、基本情况 系统&#xff1a;u 22.04 python&#xff1a; 3.10 二、问题描述 swagboot官方提供的安装路径言简意赅:python3 -m pip install --user snagboot 当然安装python3和pip是基本常识&#xff0c;这里就不再赘述。 可是在安装的时候出现如下提示说 Failed buildin…...

python每日一题——8无重复字符的最长子串

题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串…...

【数据中台】开源项目(2)-Dbus数据总线

1 背景 企业中大量业务数据保存在各个业务系统数据库中&#xff0c;过去通常的同步数据的方法有很多种&#xff0c;比如&#xff1a; 各个数据使用方在业务低峰期各种抽取所需数据&#xff08;缺点是存在重复抽取而且数据不一致&#xff09; 由统一的数仓平台通过sqoop到各个…...

职场快速赢得信任

俗话说的好&#xff0c;有人的地方就有江湖。 国内不管是外企、私企、国企&#xff0c;职场环境都是变换莫测。 这里主要分享下怎么在职场中快速赢取信任。 1、找到让自己全面发展的方法 要知道&#xff0c;职场中话题是与他人交流的纽带&#xff0c;为了找到共同的话题&am…...

【SpringBoot3+Vue3】五【完】【实战篇】-前端(配合后端)

目录 一、环境准备 1、创建Vue工程 2、安装依赖 2.1 安装项目所需要的vue依赖 2.2 安装element-plus依赖 2.2.1 安装 2.2.2 项目导入element-plus 2.3 安装axios依赖 2.4 安装sass依赖 3、目录调整 3.1 删除部分默认目录下文件 3.1.1 src/components下自动生成的…...

[LaTex]arXiv投稿攻略——jpg/png转pdf

一、将图片复制进ppt&#xff0c;右键单击图片选择设置图片格式&#xff0c;获取图片高度和宽度 二、选择“设计-幻灯片大小-自定义幻灯片大小” 三、设置幻灯片大小为图片大小 四、 选择“最大化” 五、 检查幻灯片大小是否与图像大小一致 六、导出为PDF...

使用Pytorch从零开始构建GRU

门控循环单元 (GRU) 是 LSTM 的更新版本。让我们揭开这个网络的面纱并探索这两个兄弟姐妹之间的差异。 您听说过 GRU 吗&#xff1f;门控循环单元&#xff08;GRU&#xff09;是更流行的长短期记忆&#xff08;LSTM&#xff09;网络的弟弟&#xff0c;也是循环神经网络&#x…...

【尚跑】2023宝鸡马拉松安全完赛,顺利PB达成

1、赛事背景 千年宝地&#xff0c;一马当先&#xff01;10月15日7时30分&#xff0c;吉利银河2023宝鸡马拉松在宝鸡市行政中心广场鸣枪开跑。 不可忽视的是&#xff0c;这次赛事的卓越之处不仅在于规模和参与人数&#xff0c;还在于其精心的策划和细致入微的组织。为了确保每位…...

Mac nginx安装,通过源码安装教程

第一部分 安装参考网址&#xff1a; https://blog.csdn.net/a1004084857/article/details/128512612&#xff1b; 以上步骤执行完&#xff0c;进入找到sbin目录&#xff0c;查看下面是不是有nginx可执行文件&#xff0c;如果有在当前sbin下执行./nginx,就会发现NGINX已启动 第…...

TypeScript中的枚举是什么?

在TypeScript中&#xff0c;枚举&#xff08;Enum&#xff09;是一种用于定义一组有命名的常量值的数据类型。它们可以提供更具可读性和可维护性的代码。 枚举的作用是为一组相关的值提供一个易于理解和使用的命名空间。它们可以用于代表一系列可能的选项、状态或标志&#xf…...

进程并发-信号量经典例题-面包师问题

1 题目描述 面包师有很多面包和蛋糕&#xff0c;由N个销售人员销售。每个顾客进店后先取一个号&#xff0c;并且等着叫号。当一个销售人员空闲下来&#xff0c;就叫下一个号。试用信号量的P、V操作设计该问题的同步算法&#xff0c;给出所用共享变量&#xff08;如果需要&…...

c语言练习12周(11~15)

编写double fun(int a[],int n)函数&#xff0c;计算返回评分数组a中&#xff0c;n个评委打分&#xff0c;去掉一个最高分去掉一个最低分之后的平均分 题干编写double fun(int a[],int n)函数&#xff0c;计算返回评分数组a中&#xff0c;n个评委打分&#xff0c;去掉一…...

Java 实现视频转音频功能

在实际开发中,我们经常需要处理各种多媒体文件。本文将介绍如何使用 Java 语言实现将视频文件转换为音频文件的功能。我们将使用 FFmpeg 工具来进行视频转换操作,并通过 Java 的 ProcessBuilder 实现调用系统命令执行 FFmpeg 的功能。 准备工作 首先,我们需要确保系统中已安…...

可以在Playgrounds或Xcode Command Line Tool开始学习Swift

一、用Playgrounds 1. App Store搜索并安装Swift Playgrounds 2. 打开Playgrounds&#xff0c;点击 文件-新建图书。然后就可以编程了&#xff0c;如下&#xff1a; 二、用Xcode 1. 安装Xcode 2. 打开Xcode&#xff0c;选择Creat New Project 3. 选择macOS 4. 选择Comman…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...