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

Elasticsearch相关技术点

目录ES数据结构、倒排索引、写入流程、读取流程ES检索快的核心原因Elasticsearch 性能优化Elasticsearch 和 Kafka 数据结构对比什么场景下使用了ES?//todo 项目中什么场景用了ESES 怎么用的?数据量级多少?为什么用ES 不用Hbase?倒排索引 是什么讲一下?为什么ES检索比较快?ES 数据结构是怎么样的?ES查询流程?ES如果要查10条数据需要从各个分片上各取多少条数据?ElasticSearch性能优化详解1. 硬件优化2. JVM 配置优化3. 索引优化4. 查询优化5. 集群优化6. 写入优化7. 缓存优化8. 监控与调优9. 其他优化总结一、ElasticSearch 核心面试题1. 基础概念与特点2. 核心原理:倒排索引3. 核心概念:索引、分片、副本4. 集群与节点角色5. 写入与搜索流程6. 性能与运维调优二、ELK 栈与分布式日志收集面试题1. ELK 基础2. ELK 工作流程3. 引入Kafka的架构(ELK + Kafka)4. Kafka核心概念(在日志收集场景下)5. 系统设计ElasticSearch知识体系详解| Java 全栈知识体系快手 Java 面试 | 小林codingES详解 - 优化:ElasticSearch性能优化详解 | Java 全栈知识体系ES数据结构、倒排索引、写入流程、读取流程概念定义与角色核心目的关键过程与特点对检索速度的贡献索引​逻辑容器,最高层的数据集合。数据的逻辑分组与操作入口。可定义映射(Schema),是操作的主要对象。提供清晰的数据边界和操作目标。分片​索引的水平分割。一个分片就是一个完整的Lucene索引。分布式存储与计算,实现水平扩展和高可用。1. 主/副本分片机制。2. 是数据分布和并行处理的基本单元。并行计算:查询可以同时发送到所有相关分片(主分片或副本)执行,极大提升吞吐量。Segment​分片的物理组成部分,是最小的、不可变的倒排索引文件。实现高效、可靠的索引与检索机制。1.不可变(删除文档仅为标记)。2. 搜索时需遍历分片内所有Segment。3. 后台自动合并以优化性能与空间。不可变性:无需锁,支持高效的缓存和并发读取。合并优化:减少Segment数量,提升查询效率。倒排索引​Segment内部的核心数据结构,一种“从词找文档”的索引。实现毫秒级的全文检索。1. 包含词典和记录文档ID、词频、位置的倒排表。2. 支持快速的布尔运算(与/或)。算法核心:直接通过关键词定位文档,而非逐行扫描,这是全文检索快的根本。Term Index​倒排索引的加速索引,通常是词典的前缀索引,存在于内存中。快速定位到Term Dictionary中的词项。1. 类似于字典的部首目录。2. 常驻内存,检索速度快。内存加速:将磁盘上的词典查找转化为高效的内存查找,极大减少了磁盘随机I/O。Stored Fields​按行存储的原始字段值。返回指定的原始字段内容。1. 存储未被分析的原始值。2. 用于获取搜索结果中要展示的字段内容。快速取回:在找到文档ID后,能高效地获取要返回的字段值,完成查询的最后一步。Doc Values​按列存储的字段值,在索引时创建。高效执行聚合、排序、脚本访问。1.列式存储,针对聚合和大规模数值处理高度优化。2. 默认存储在磁盘,但可高效缓存到内存。列式处理:对于聚合、排序等操作,无需加载整行数据,可以快速对某一列进行顺序计算,比使用倒排索引做这些操作快得多。写入流程​文档从接收到持久化的过程。持久化数据并使其可被搜索。1.写入缓冲与刷新机制。2.近实时搜索(NRT)。近实时性:数据在写入后约1秒即可被搜索到,平衡了写入性能与检索的实时性需求。查询流程​从接收搜索请求到返回结果的过程。快速、准确地检索数据。1.分发-并行搜索-合并。2. 综合利用上述所有数据结构。协同优化:整个流程完美结合了分布式并行(分片)、内存加速(Term Index)、高效算法(倒排索引)、列式处理(Doc Values)和实时获取(Stored Fields)。ES检索快的核心原因分布式并行处理:利用分片将数据和计算压力分散到集群多个节点。高效的数据结构:核心是倒排索引,实现了从词到文档的快速映射。内存加速:使用Term Index等结构将磁盘查找转化为内存查找。列式存储优化:Doc Values为聚合、排序等操作提供了极快的列式数据访问路径。近实时设计:通过刷新机制,使新数据能很快被搜索到。不可变性与缓存友好:Segment的不可变性使得缓存策略高效,支持高并发读。Elasticsearch 性能优化优化维度具体优化点核心思路与操作预期收益与注意事项索引设计优化​1. 合理设置分片数​-黄金法则:单个分片大小建议在10GB - 50GB​ 之间(基于SSD)。- 考虑数据总量和增长。- 分片数 = 总数据量 / 30GB。分片过小则开销大,过大则影响迁移恢复。避免分片过多导致元数据膨胀和调度开销,也避免分片过大导致恢复慢、查询慢。2. 精心设计Mapping​- 明确字段类型,避免动态映射。- 对无需分词的字段(如ID、状态码、标签)使用keyword​ 类型。- 对无需搜索、仅用于返回的字段,设置"index": false。- 合理使用copy_to​ 合并字段,减少查询条件。节省存储,提升索引和查询速度。keyword类型利用Doc Values,聚合和排序极快。3. 索引生命周期管理​- 使用ILM​ 或定时任务,按时间滚动索引(如按天、月)。- 对历史索引进行_forcemerge(合并Segment,设为max_num_segments=1)。- 对冷数据索引设置"codec": "best_compression"并关闭副本。控制单个索引大小,提升热点索引性能;大幅降低冷数据存储成本。集群与分片优化​1. 避免“过度分片”​监控集群总分片数。一个小型集群总分片数建议控制在几千以内。通过ILM或扩大索引分片容量来减少分片总数。降低主节点元数据管理和调度压力,提升集群稳定性。2. 使用冷热架构​节点分为“热”节点(SSD,高性能CPU)和“冷”节点(HDD,大容量)。将当前活跃索引分配到热节点,历史索引迁移到冷节点。用最低成本同时满足高性能查询和大容量存储的需求。3. 设置合理的副本数​初期可设为1。在写入压力大但可容忍暂时丢失数据时,可临时设为0,写入完成后再恢复。副本提高读取吞吐和可用性,但会增加写入开销和存储成本。搜索查询优化​1. 善用Filter Context​对不需要相关性算分的查询(如term,range,bool中的过滤条件),务必放入filter​ 子句。结果可被缓存,跳过算分阶段,大幅提升查询速度。2. 避免深度分页和超大结果集​- 避免使用from + size做深度分页(如 1000)。改用search_after。- 避免使用size: 0获取全量数据做聚合,应通过聚合直接出结果。深度分页涉及全局排序,开销极大。search_after性能恒定。3. 优化查询语句​- 限制返回字段(_sourcefiltering)。- 使用更高效的查询(如用term而非match查keyword字段)。- 避免通配符开头的模糊查询(wildcard)。- 对范围查询,考虑使用日期/数值字段。减少网络传输和序列化开销,利用更高效的查询逻辑。4. 使用路由​在写入和查询时指定routing​ 参数(如用户ID),将相关数据集中到同一分片。避免查询时广播到所有分片,将全局查询变为分片局部查询,大幅提升效率。写入优化​1. 批量写入​使用Bulk API,单批次大小建议在5-15 MB。通过测试找到最佳值。减少网络往返和索引创建开销,写入吞吐量可提升数个量级。2. 调整刷新间隔​对写入速度要求高、实时性要求不高的场景,可临时调大索引的refresh_interval(如至30s)。减少生成Segment(刷新)的频率,降低写入开销,提升吞吐。3. 临时关闭副本与刷新​大规模初始导入时:1. 设置index.number_of_replicas: 02. 设置refresh_interval: -1导入完成后恢复。写入期间完全不构建副本、不刷新,使写入速度达到物理极限。4. 优化硬件与OS配置​- 使用SSD。- 为ES进程预留足够内存(通常为系统内存的50%,不超过32GB)。- 调整Linux的vm.max_map_count和文件描述符限制。磁盘IO是主要瓶颈,SSD提升最大。足够的内存用于JVM堆和操作系统缓存。资源与监控​1. 监控关键指标​-节点级别:CPU、内存、磁盘IO、磁盘空间。-索引/分片级别:查询/索引延迟、拒绝率、Segment数量和大小(_cat/indices?v)。-集群级别:总分片数、未分配分片、主节点负载。及时发现瓶颈(如磁盘IO打满、GC频繁、某个索引查询慢)。2. 强制合并Segment​对不再写入的只读索引,执行POST /index_name/_forcemerge?max_num_segments=1。极大减少Segment数量,提升查询速度,并释放磁盘空间。3. 合理设置JVM堆​设置为机器内存的50%,且不超过32GB(以利用压缩指针)。建议设置-Xms和-Xmx相等。避免堆过大导致GC停顿时间过长,或堆过小导致频繁GC。总结:性能优化是一个系统工程,需在资源投入、数据设计、查询模式三者间找到最佳平衡。核心思路是:设计阶段做好规划(Mapping、分片)​ -写入时用批量、调参数​ -查询时用对语法、避坑​ -事后监控、持续调优。Elasticsearch 和 Kafka 数据结构对比对比维度Elasticsearch (面向搜索的存储)​Kafka (面向流的数据总线)​核心差异解读​核心数据模型​索引 - 类型(已弃用) - 文档​以“文档”为实体,建立反向索引以支持复杂查询。主题 - 分区 - 消息​以“消息”为实体,按顺序组织成持久化日志。ES是状态数据库,存储当前数据状态并支持查询;Kafka是日志流,记录事件的变更序列。核心存储单元​分片: 索引的水平切片,是一个独立的Lucene索引。Segment: 分片内不可变的倒排索引文件。分区: 主题的水平切片,是一个独立的顺序写入日志。日志段: 分区内按时间或大小切分的物理文件(.log)。ES的存储单元为搜索优化(倒排索引);Kafka的存储单元为顺序IO优化(追加日志)。索引机制​倒排索引: 核心结构,实现“词-文档”的快速映射。Doc Values: 列式存储,用于聚合排序。偏移量索引: 内存映射文件,实现“消息偏移量-物理文件位置”的映射。时间索引: 支持按时间戳查找消息。ES的索引用于内容检索;Kafka的索引用于位置定位,以加速按偏移量或时间戳的消息读取。数据组织方式​按内容索引: 数据被分析、分词,并建立复杂的索引结构以供多维查询。按顺序追加

相关文章:

Elasticsearch相关技术点

目录 ES数据结构、倒排索引、写入流程、读取流程 ES检索快的核心原因 Elasticsearch 性能优化 Elasticsearch 和 Kafka 数据结构对比 什么场景下使用了ES?//todo 项目中什么场景用了ES ES 怎么用的?数据量级多少?为什么用ES 不用Hbase? 倒排索引 是什么讲一下? 为…...

Spring Cloud Config 2.2.2 是 Spring Cloud 的一个**配置中心组件版本**

Spring Cloud Config 2.2.2 是 Spring Cloud 的一个配置中心组件版本,发布于 2020 年 3 月(属于 Spring Cloud Hoxton.SR3 版本栈),基于 Spring Boot 2.2.x 构建。该版本已停止官方维护(EOL),Sp…...

Spring Cloud App Broker 1.0.5 是 Spring Cloud 团队发布的用于构建云原生服务代理(Service Broker)的开源框架的一个维护版本

Spring Cloud App Broker 1.0.5 是 Spring Cloud 团队发布的用于构建云原生服务代理(Service Broker)的开源框架的一个维护版本。该版本主要包含错误修复、安全补丁、依赖升级(如 Spring Boot、Spring Cloud 及相关组件的兼容性更新&#xff…...

java毕业设计——基于JSP+sqlserver的网上书店系统设计与实现(毕业论文+程序源码)——网上书店

基于JSPsqlserver的网上书店系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于JSPsqlserver的网上书店系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的…...

java毕业设计——基于JSP+sqlserver的网上购物系统设计与实现(毕业论文+程序源码)——网上购物系统

基于JSPsqlserver的网上购物系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于JSPsqlserver的网上购物系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的…...

java毕业设计——基于JSP+sqlserver的网络远程作业处理系统设计与实现(毕业论文+程序源码)——网络远程作业处理系统

基于JSPsqlserver的网络远程作业处理系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于JSPsqlserver的网络远程作业处理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文…...

斜率计算2

斜率计算2 描述 现在给出两个点的坐标,要你求出斜率,这个斜率需要用最简分数表示,同时斜率不存在输出-1 输入 输入4个整数 x1,y1,x2,y2.分别是A,B两点的坐标。 输出 输出两点所确定直线的斜率,不存在则输出-1. 输入样例 1 2…...

C++做石头剪刀布

运作原理程序里1代表石头&#xff1b;2代表布&#xff1b;3代表剪刀&#xff0c;然后让计算机随机从1~3抽一个数&#xff0c;再来判断。界面std::cout << " 石头剪刀布 \n";std::cout << " Rock Paper Scissors \n";std::cout << …...

PCL 计算两点云之间的最小距离【2026最新版】

目录 一、 算法原理 二、 代码实现 三、 结果展示 四、 相关链接 本文由CSDN点云侠原创,原文链接,首发于:2023年11月24日。博客长期更新,本文最新更新时间为:2026年3月15日。 一、 算法原理 pcl::registration::CorrespondenceEstimation是确定目标和查询点集(或特征)之…...

NPU算力突破对其他行业的意义是什么?

NPU&#xff08;神经网络处理器&#xff09;算力突破100 TOPS&#xff08;每秒万亿次运算&#xff09;&#xff0c;不仅是手机行业的里程碑&#xff0c;更是汽车、医疗、工业和物联网等多个领域智能化转型的关键催化剂。这一算力阈值的跨越&#xff0c;意味着复杂的AI大模型可以…...

CRMEB 陀螺匠合同签约功能说明

合同签约一、功能简介合同签约支持使用线上腾讯电子签&#xff0c;也支持线下签约后&#xff0c;将签约文件录入系统进行记录。二、操作说明1. 页面路径&#xff1a;客户 > 合同签约2. 电子签流程&#xff1a;一号通合同状态&#xff1a;INIT合同创建&#xff0c;PART合同签…...

阿里云的各种产品都是干什么的?

ECS (Elastic Compute Service)&#xff1a;以虚拟机的方式将一台物理机分成多台云服务器&#xff0c;提供可伸缩的计算服务。 SLB (Server Load Balance&#xff09;&#xff1a;基于LVS和Tengine实现的4层和7层负载均衡&#xff0c;有动态扩容&#xff0c;session保持等特点…...

Spring Boot 外部化配置优先级

1、优先级排序开发者通过编程方式提供的配置&#xff1a;使用 SpringApplicationBuilder 或者 SpringApplication 直接设置的属性。命令行参数&#xff1a;运行时传递给应用程序的命令行参数&#xff0c;如 java -jar app.jar --server.port8081。Java系统属性&#xff08;Syst…...

文本分析(停用词库)

集合百度停用词表、中文停用词表、哈工大停用词库、四川大学机器智能实验室停用词库。在原文基础上加入了自己实验的停用词。分析 建设 结构 三只 松鼠 三只松鼠 我国 干部 关系 解决 提出 领域 始终 特别 做出 作出 提供 十八 党内 这是 更好 第一 第二 第三 第四 第五 第六 着…...

ThreadLocal为什么能实现线程数据隔离

ThreadLocal的get()和set()方法会访问当前线程的ThreadLocalMap&#xff0c;每个线程都有自己独立的ThreadLocalMap实例。这个映射表以ThreadLocal实例this作为键&#xff0c;与线程特定的值&#xff08;value&#xff09;相关联&#xff0c;因此每个线程既使通过同一个ThreadL…...

Social-Engineer Toolkit (SET) 终极指南:10大社会工程攻击向量深度解析

Social-Engineer Toolkit (SET) 终极指南&#xff1a;10大社会工程攻击向量深度解析 【免费下载链接】social-engineer-toolkit The Social-Engineer Toolkit (SET) repository from TrustedSec - All new versions of SET will be deployed here. 项目地址: https://gitcode…...

Siri Ultra开发路线图:未来将新增哪些令人期待的LLM功能?

Siri Ultra开发路线图&#xff1a;未来将新增哪些令人期待的LLM功能&#xff1f; 【免费下载链接】siri-ultra The most intelligent Siri powered by LLMs 项目地址: https://gitcode.com/gh_mirrors/si/siri-ultra Siri Ultra作为一款由LLMs&#xff08;大型语言模型&…...

如何快速集成 Vue Google Autocomplete:打造智能地址搜索体验

如何快速集成 Vue Google Autocomplete&#xff1a;打造智能地址搜索体验 【免费下载链接】vue-google-autocomplete A Vue.js autosuggest component for the Google Places API. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-google-autocomplete Vue Google Aut…...

Takahē社区建设指南:服务器公告、用户互动与内容 moderation 策略

Takahē社区建设指南&#xff1a;服务器公告、用户互动与内容 moderation 策略 【免费下载链接】takahe An ActivityPub/Fediverse server 项目地址: https://gitcode.com/gh_mirrors/ta/takahe Takahē 作为一款强大的 ActivityPub/Fediverse 服务器&#xff0c;为社区…...

Buster批量电子邮件处理教程:从列表导入到结果分析

Buster批量电子邮件处理教程&#xff1a;从列表导入到结果分析 【免费下载链接】buster An advanced tool for email reconnaissance 项目地址: https://gitcode.com/gh_mirrors/bus/buster Buster是一款强大的电子邮件侦察工具&#xff0c;能够帮助用户高效处理批量电子…...

探索全栈新境界:Angular Full Stack项目解读

探索全栈新境界&#xff1a;Angular Full Stack项目解读 【免费下载链接】Angular-Full-Stack DavideViolante/Angular-Full-Stack: 是一个用于 Angular 的企业级全栈应用模板。适合对 Angular 和全栈开发有兴趣的人&#xff0c;特别是想快速构建基于 Angular 的企业级应用的人…...

10分钟上手Library:新闻团队协作文档系统快速搭建指南

10分钟上手Library&#xff1a;新闻团队协作文档系统快速搭建指南 【免费下载链接】library A collaborative documentation site, powered by Google Docs. 项目地址: https://gitcode.com/gh_mirrors/libr/library Library是一款基于Google Docs的协作新闻编辑室文档系…...

如何利用Touca实现工程团队的持续回归测试:完整指南

如何利用Touca实现工程团队的持续回归测试&#xff1a;完整指南 【免费下载链接】trytouca Continuous Regression Testing for Engineering Teams 项目地址: https://gitcode.com/gh_mirrors/tr/trytouca Touca是一款专为工程团队打造的持续回归测试工具&#xff0c;它…...

java毕业设计下载(全套源码+配套论文)——基于javaEE+SSH+mysql的医院在线挂号系统设计与实现

基于javaEESSHmysql的医院在线挂号系统设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于javaEESSHmysql的医院在线挂号系统设计与实现&#xff0c;更多精选毕业设计项目实例见文末哦。 文章目录&#xff1a; 基于javaEESSHmysql的医…...

java毕业设计下载(全套源码+配套论文)——基于javaEE+SSH+mysql的百货中心供应链管理系统设计与实现

基于javaEESSHmysql的百货中心供应链管理系统设计与实现&#xff08;全套源码配套论文&#xff09; 大家好&#xff0c;今天给大家介绍基于javaEESSHmysql的百货中心供应链管理系统设计与实现&#xff0c;更多精选毕业设计项目实例见文末哦。 文章目录&#xff1a; 基于javaE…...

java毕业设计,基于java+原生Sevlet+socket的聊天室系统设计与实现(全套源码+配套论文),聊天室系统

基于java原生Sevletsocket的聊天室系统设计与实现&#xff08;全套源码配套论文&#xff09; 大家好&#xff0c;今天给大家介绍基于java原生Sevletsocket的聊天室系统设计与实现&#xff0c;更多精选毕业设计项目实例见文末哦。 文章目录&#xff1a; 基于java原生Sevletsoc…...

java毕业设计,基于java+swing+GUI的雷电游戏GUI设计与实现(全套源码+配套论文),雷电游戏

基于javaswingGUI的雷电游戏GUI设计与实现&#xff08;全套源码配套论文&#xff09; 大家好&#xff0c;今天给大家介绍基于javaswingGUI的雷电游戏GUI设计与实现&#xff0c;更多精选毕业设计项目实例见文末哦。 文章目录&#xff1a; 基于javaswingGUI的雷电游戏GUI设计与…...

如何在Mac上安装与使用Emacs Mac Port:完整指南

如何在Mac上安装与使用Emacs Mac Port&#xff1a;完整指南 【免费下载链接】homebrew-emacsmacport Emacs mac port formulae for the Homebrew package manager 项目地址: https://gitcode.com/gh_mirrors/ho/homebrew-emacsmacport Emacs Mac Port是为macOS系统优化的…...

如何快速使用Tiled2Unity:从Tiled地图到Unity的完整导出指南

如何快速使用Tiled2Unity&#xff1a;从Tiled地图到Unity的完整导出指南 【免费下载链接】Tiled2Unity Export Tiled Map Editor (TMX) files into Unity 项目地址: https://gitcode.com/gh_mirrors/ti/Tiled2Unity Tiled2Unity是一款强大的工具&#xff0c;能够将Tiled…...

Hasura Backend Plus核心功能解析:JWT认证与S3存储无缝集成

Hasura Backend Plus核心功能解析&#xff1a;JWT认证与S3存储无缝集成 【免费下载链接】hasura-backend-plus &#x1f511;Auth and &#x1f4e6;Storage for Hasura. The quickest way to get Auth and Storage working for your next app based on Hasura. 项目地址: ht…...