面试题-Elasticsearch集群架构和调优手段(超全面)

在这里插入图片描述


对于Elasticsearch(ES),我了解并有经验。在我之前的公司,我们有一个相对大型的ES集群,以下是该集群的架构和一些调优手段的概述:

1. 集群架构

在这里插入图片描述

  • 集群规模:我们的ES集群由15个节点组成,涵盖了数据节点和主节点。
  • 索引数量:我们有30多个索引,根据不同的数据通道进行划分。每天根据日期递增创建新的索引,大约每天增加20个以上的索引。
  • 分片数:每个索引有10个主分片,用于水平分布和并行处理数据。
  • 数据大小:每个索引的大小受限制在150GB以内。
    (根据实际的项目经验来说 如果没有就按照这个说就行,前提是你得理解技术细节 不然容易露馅)

2. 调优手段

在这里插入图片描述

2.1 设计阶段调优

在这里插入图片描述

  • 基于日期模板创建索引:通过使用roll over API,我们按照日期模板创建新的索引,以便更好地管理和维护数据。
  • 使用别名进行索引管理:通过别名来引用索引,而不是直接使用具体的索引名称,简化了索引切换和管理的过程。
  • 定时force_merge操作:每天凌晨定时执行force_merge操作,以减少碎片并释放磁盘空间。
  • 冷热分离机制:将热数据存储在SSD上,以提高检索效率,同时定期对冷数据进行shrink操作,以减少存储空间占用。
  • 使用Curator进行索引的生命周期管理:通过Curator工具自动管理索引的创建、删除和归档等操作。
  • 合理设置分词器:针对需要进行全文搜索的字段,选择合适的分词器以提高搜索质量和效率。
  • 结合字段属性进行Mapping设置:在Mapping阶段,根据字段的需求和特性,设置是否需要检索、是否需要存储等属性。
2.2 写入调优

在这里插入图片描述

  • 副本数设置为0:在写入数据之前暂时关闭副本,以提高写入性能。
  • 关闭refresh_interval:在写入过程中,将refresh_interval设置为-1,禁用刷新机制,以减少刷新操作对写入性能的影响。
  • 批量写入:使用bulk批量写入API,将多个文档一次性提交,减少频繁的网络开销和IO操作。
  • 恢复副本数和刷新间隔:在写入完成后,恢复副本数和刷新间隔,以确保数据的可靠性和及时可见性。
  • 自动生成ID:尽量使用ES自动生成的ID,避免额外的ID生成操作和性能消耗。
2.3 查询调优

在这里插入图片描述

  • 禁用通配符查询:尽量避免使用通配符查询,因为它们会增加查询的复杂性和开销。

  • 避免批量terms查询:对于包含大量terms的查询,尽量避免使用批量terms查询,以免影响查询性能。

  • 合理使用keyword类型:尽可能将字段设置为keyword类型,充分利用倒排索引机制,提高查询效率。

  • 基于时间范围进行索引选择:对于大量数据的情况,可以根据时间范围先确定索引,以减少需要搜索的索引数量。

  • 设置合理的路由机制,在选择合理的路由机制时,可以考虑以下几个因素:
    在这里插入图片描述

    数据特点:根据数据的特点,选择适合的路由字段。例如,如果数据中包含地理位置信息,可以选择将地理位置作为路由字段,以便将具有相似地理位置的文档存储在相邻的分片上,提高查询效率。

    查询需求:根据常见的查询需求,选择合适的路由策略。例如,如果经常根据时间范围进行查询,可以选择将时间作为路由字段,使具有相近时间的文档存储在相邻的分片上,以便快速定位需要查询的数据。
    分片数量:考虑集群中的分片数量和规模,选择适当的路由策略。如果集群中的分片较少,可以使用哈希路由(默认路由策略),以确保数据均匀分布。如果集群中的分片较多,可以选择更具体的路由策略,以满足特定的查询需求。

理的路由策略,以实现数据的均衡分布和查询的优化。


2.4 其他调优

在这里插入图片描述

  • 部署调优:优化硬件配置、网络拓扑和节点布局,以确保集群的性能和可靠性。
  • 业务调优:根据具体业务需求和查询模式,优化查询DSL语句、索引设计和数据模型,以提高搜索效率和准确性。(偏向于具体的业务怎么设计)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/772774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水果店如何开发自己的微信小程序_新鲜生活,触手可及

水果店微信小程序:新鲜生活,触手可及 在这个快节奏的时代,我们都在追求更高效、更便捷的生活方式。而微信小程序,正是这样一个让生活变得更加轻松便捷的神奇工具。今天,我要向大家介绍的,就是一家独具匠心…

独享IP可以避免被封禁或限制访问的风险

在一些网站或服务中,存在对共享IP的封禁或限制访问的情况,这给用户带来了不便。而使用独享IP可以有效规避这一问题,保障用户正常访问需求。例如,在进行搜索引擎优化、社交媒体营销或广告投放时,独享IP可以确保用户的网…

window下迁移SVN仓库到新的windows服务器

一、背景 一个基于 Windows 的 SVN 服务器,用于管理团队的代码库。该 SVN 仓库托管着公司的软件项目,包括多个分支和版本的代码。我们的团队规模约为 50 人,分布在不同的地理位置,他们都依赖 SVN 仓库来进行代码版本控制和协作开…

LeetCode146:LRU缓存

leetCode:146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#x…

微服务(基础篇-005-Gateway)

目录 Gateway介绍: 为什么需要网关(1) gateway快速入门(2) 断言工厂(3) 过滤器工厂(4) 过滤器工厂介绍及案例(4.1) 默认过滤器&#xff08…

IMac、Chrome、vim、pycharm的常用快捷键和常用开发工具homebrew

mac系统 陌生按键 用惯了windows的uu们(譬如本人)刚开始接触时可能就看不懂以下按键,多看几遍就好了 ⌘ (Command / Cmd) ⌥ (Option) ⌃ (control) ⇧ (shift) ⏏️ (Eject) 《关闭应用程序CommandQ》和《关闭应用界面CommandW》 comman…

C#进阶-反射的详解与应用

一、反射的概念 反射是.NET框架提供的一个功能强大的机制,它允许程序在运行时检查和操作对象的类型信息。通过使用反射,程序可以动态地创建对象、调用方法、访问字段和属性,无需在编译时显式知道类型信息。在.NET中,所有类型的信…

【STL学习】(2)string的模拟实现

前言 本文将模拟实现string的一些常见功能,目的在于加深理解string与回顾类与对象的相关知识。 一、前置知识 string是表示可变长的字符序列的类string的底层是使用动态顺序表存储的string对象不以’\0’字符为终止算长度,而是以size有效字符的个数算长…

华为openGauss数据库全面解读:数据类型一览与实战指南

引言: 华为openGauss数据库作为一款优秀的国产企业级数据库产品,其丰富多样的数据类型设计为多样化的业务场景提供了强大的数据存储与处理能力。本文将深入浅出地介绍openGauss支持的主要数据类型,并辅以实际应用案例,帮助读者更…

分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)

目录 分布式系统面试全集通第一篇什么是分布式?和微服务的区别什么是分布式分布式与微服务的区别 什么是CAP?为什么不能三者同时拥有分区容错性一致性可用性 Base理论了解吗基本可用软状态最终一致性 什么是分布式事务分布式事务有哪些常见的实现方案?2PC(Two Ph…

2024-03-26 Android8.1 px30 WI-FI 模块rtl8821cu调试记录

一、kernel 驱动,我这里使用v5.8.1.2_35530.20191025_COEX20191014-4141这个版本,下载这个版本的驱动可以参考下面的文章。 2021-04-12 RK3288 Android7.1 USB wifi bluetooth 模块RTL8821CU 调试记录_rk平台rtl8821cu蓝牙调试-CSDN博客 二、Makefile文…

vue 复制到剪切板 公共方法组件 clipboard 第一次没反应第二次成功

背景:使用clipboard时候想提出组件,后续发现第一次没反应第二次成功 原理:clipboard是创建一个dom监听,然后点击dom时候复制并触发回调函数。所以第一次点击时候是创建监听,第二次点击才能被监听到 解决方案&#xff1…

KY228 找位置(用Java实现)

描述 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1;a,4;a,5;a,10,b,2&…

2960. 统计已测试设备

文章目录 题意思路代码 题意 题目链接 思路 设备数1&#xff0c;time1 代码 class Solution { public:int countTestedDevices(vector<int>& batteryPercentages) {int time 0;int ans 0;for (auto &i:batteryPercentages){if (i - time > 0){time;ans…

Postwoman 安装

Postwoman作为Postman的女朋友&#xff0c;具有免费开源、轻量级、快速且美观等特性&#xff0c;是一款非常好用的API调试工具。能帮助程序员节省时间&#xff0c;提升工作效率。 Github地址&#xff1a;GitHub - hoppscotch/hoppscotch: &#x1f47d; Open source API devel…

深入了解Hadoop:特性与伪分布式运行进程

引言 Hadoop是一个强大的分布式计算框架&#xff0c;它能够对大规模数据进行可靠、高效和可伸缩的处理。随着数据量的不断增长&#xff0c;企业对于处理大规模数据的需求也越来越高&#xff0c;Hadoop因此成为了大数据处理领域的首选技术。本文将深入探讨Hadoop的特性以及伪分…

如何打包springboot项目并部署服务器

创建一个springboot项目&#xff0c;先写一个接口&#xff0c;我这里是dabaimao/jiekou,启动访问 在pom中加上maven插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin<…

2010年之前电脑ubuntu安装nvidia驱动黑屏处理

装好驱动 仿真fps直接到60Hz 陈旧设备 都是非常老旧的电脑&#xff0c;没钱换新电脑&#xff0c;就这么穷…… 电脑详细配置&#xff1a; 冲动 想装显卡驱动提升一下性能&#xff0c;结果……黑了 黑习惯了也无所谓&#xff0c;几分钟就能解决&#xff0c;关键还是太穷&…

ES6 字符串/数组/对象/函数扩展

文章目录 1. 模板字符串1.1 ${} 使用1.2 字符串扩展(1) ! includes() / startsWith() / endsWith()(2) repeat() 2. 数值扩展2.1 二进制 八进制写法2.2 ! Number.isFinite() / Number.isNaN()2.3 inInteger()2.4 ! 极小常量值Number.EPSILON2.5 Math.trunc()2.6 Math.sign() 3.…

【Go】八、Gin 入门使用简介

GIN GIN 是一个高性能&#xff0c;简单易用的轻量级 WEB 框架 快速尝试 package mainimport ("github.com/gin-gonic/gin""net/http" )func pong(c *gin.Context) {// 这里的 gin.H 是 map[string]interface{} 的缩写c.JSON(http.StatusOK, gin.H{"…