聊一聊Elasticsearch的一些基本信息
一、Elasticsearch是什么
Elasticsearch简称ES,是一款分布式搜索引擎。它是在Apache Lucene基础之上采用Java语言开发的。
Elasticsearch的官方网站对它的解释是:Elasticsearch是一个分布式、RESTful的搜索和数据分析引擎。
通过上边的官方解释,我们可以看出ES提供两大功能:数据的搜索和分析。
二、Elasticsearch的使用场景
- 在线实时日志分析:从最初的ELK到目前的Elastic Stack,包含了在线日志采集、存储和分析等功能。
- 物联网数据监控
- 文献检索和文献计量
- 商务智能(business intelligence,BI)大屏展示
三、Elastic Stack
对于ES的接入方式来说,除了用自己手写的应用程序去写入ES这种方式以外,我们还以使用官方提供的数据采集工具以及第三方的ETL工具来把数据写入到ES中。
官方早期提供了Logstash来作为接入工具去完成进行数据采集和转换的工作。由于运行时比较消耗资源,官方后续推出了一系列命名包含beat的轻量级数据采集器,统称为Beats,我们可以理解为Beats分包了Logstash的数据采集功能。
我们可以通过Beats将采集到的数据数据先汇集到Logstash中再写入到ES,也可以直接通过Beats将采集到的数据直接写到ES中,如下图:


四、专有名词介绍
- 集群(cluster):多个安装Elasticsearch的服务器具有相同的集群名称,则这些服务器组成一个集群,统一对外提供服务。一个集群中有且只有一个主节点,当主节点挂掉了则会选举出一个新的主节点来维持集群的运转。
- 节点(node):一个安装了Elasticsearch的服务机就是一个节点,它是组成集群的基本单元。
- 索引(index):用来存储数据,可以简单的理解为关系型数据库中的表。
- 文档(document):写入索引的基本单元,一个文档就是索引中的一条数据。
- 分片(shard):对于一个索引来说,会有一个主分片和与它对应的零个或多个副本分片。一个分片本质上就是一个Luncene索引。为了保证分片在集群内分布均匀,分片会在集群中进行移动,这个过程就是分片的分配。索引的主分片和副本分片不能位于同一个节点上,我们要保证节点宕机的时候,主分片和副本分片不能同时丢失。
- 主分片(primary shard):负责将文档数据写入索引,同时将数据同步给副本分片。主分片的数量在创建索引的时候就确定了,不允许修改。通常主分片的数量与索引存储数据的数据量成正比。
- 副本分片(replica shard):作为主分片的一个副本,可以承担一部分数据查询的请求(提供搜索的吞吐量),还具有容灾备份的能力,当主分片丢失了(例如:所在节点宕机),副本分片可以被选举为新的主分片来保持数据的完整性。相较于主分片的数量确定后就不可修改,副本分片的数量可以随时修改。
- 分片恢复(shard recovery):将一个分片的数据同步到另外一个分片上的过程,称为分片恢复,这个过程通常伴随着创建和分配。只有等到分片恢复后,副本分片才能对外提供搜索服务。
- 索引缓冲区(index buffer):写入索引的数据会先写入索引缓冲区中,当缓冲区满了的时候,缓冲区中的数据才会被写到磁盘上。
- 传输模块(transport module):当一个节点接收到请求后无法处理或者无法单独处理的时候,会将这个请求转发给其他节点,节点之间相互通讯是通过传输模块来完成的。
- 网关模块 (gateway module):网关模块存储着集群的信息以及每个索引分片的持久化数据。默认使用的是本地网关,它会把数据存储到本地文件系统中。
- 节点发现模块(node discovery module):用于节点之间相互识别,将新的节点加入到集群中。
- 线程池(thread pool):ES内提供了很多用于处理不同操作的线程池,例如:analyze线程池用于处理文本分析的请求,write线程池用于处理索引数据的写入请求,search线程池用于处理搜索请求。
五、配置JVM的堆内存大小
在ES节点上有三个重要的配置文件: elasticsearch.yml用于配置节点的参数、jvm.options用来配置Elasticsearch运行时占用的堆内存大小、log4j2.properties用来配置Elasticsearch运行时的日志参数。
我们通过jvm.options配置文件来设置ES运行时JVM堆内存的大小。如果JVM堆内存设置过小,可能查询时内存不够导致宕机;如果设置过大,又会超过JVM用于压缩对象指针的阈值而导致内存浪费。
设置JVM堆内存大小需要满足以下2个条件
-
堆内存最大不得超过开启压缩对象指针的阈值,一般最大可以是31GB(不同的系统可能有区别)。
-
在堆内存不超过上述阈值的前提下,其大小可以设置为其所在节点内存的一半。
例如,你的服务器有16GB内存,就可以把堆内存大小设置为8GB,但是如果服务器内存为128GB,则通常堆内存最多只能设置为31GB。
默认JVM堆内存的大小为1G。
六、参考文献
- 《Elasticsearch数据搜索与分析实战》——王深湛
下一篇:《聊一聊Elasticsearch的原理与机制》
相关文章:
聊一聊Elasticsearch的一些基本信息
一、Elasticsearch是什么 Elasticsearch简称ES,是一款分布式搜索引擎。它是在Apache Lucene基础之上采用Java语言开发的。 Elasticsearch的官方网站对它的解释是:Elasticsearch是一个分布式、RESTful的搜索和数据分析引擎。 通过上边的官方解释&#…...
Unity 两篇文章熟悉所有编辑器拓展关键类 (上)
本专栏基础资源来自唐老狮和siki学院,仅作学习交流使用,不作任何商业用途,吃水不忘打井人,谨遵教诲 编辑器扩展内容实在是太多太多了(本篇就有五千字) 所以分为两个篇章而且只用一些常用api举例,…...
Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)
一、什么是 SPI SPI 全名 Service Provider interface,翻译过来就是“服务提供接口”。基本效果是,申明一个接口,然后通过配置获取它的实现,进而实现动态扩展。 Java SPI 是 JDK 内置的一种动态加载扩展点的实现。 一般的业务代…...
合并排序算法(C语言版)
#include <stdio.h> void Copy(int *a, int *b, int left, int right) { int i; for(i0;i<right-left1;i) { a[ileft] b[i]; } } // 将 a[left,middle] 和 a[middle1,right]合并到 b[left, right]中 void Merge(int *a, int left, int midd…...
C++——输入一行文字,找出其中的大写字母、小写字母、空格数字以及其他字符各有多少。用指针或引用方法处理。
没注释的源代码 #include <iostream> using namespace std; int main() { char c; int ul0,ll0,sp0,di0,other0; cout<<"please input script c:"; while(cin.get(c)) { if(c\n) break; else if(c>A&&…...
【skywalking】maximum query complexity exceeded 3336 > 3000
问题 skywalking相关版本信息 jdk:17skywalking:10.1.0apache-skywalking-java-agent:9.3.0ElasticSearch : 8.8.2 问题描述 maximum query complexity exceeded 3336 > 3000 最大查询复杂度超过3336>3000 可能原因 查询条件过于复…...
开源一个开发的聊天应用与AI开发框架,集成 ChatGPT,支持私有部署的源码
大家好,我是一颗甜苞谷,今天分享一个开发的聊天应用与AI开发框架,集成 ChatGPT,支持私有部署的源码。 介绍 当前系统集成了ChatGPT的聊天应用,不仅提供了基本的即时通讯功能,还引入了先进的AI技术&#x…...
开发了一个成人学位英语助考微信小程序
微信小程序名称:石榴英语 全称:石榴英语真题助手 功能定位 北京成人学士学位英语辅助学习工具,包含记高频单词,高频词组,专项练习,模拟考试等功能。 开发背景 个人工作需要提高学习英文水平ÿ…...
LeetCode16:最接近的三数之和
原题地址:. - 力扣(LeetCode) 题目描述 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1…...
VisualStudio2022配置2D图形库SFML
文章目录 1. 下载安装SFML库2. 创建C项目并配置SFML配置include目录和库目录链接SFML库配置动态链接库 3. 测试 1. 下载安装SFML库 SFML(Simple and Fast Multimedia Library)C库,适合2D游戏和图形界面,提供了以下模块࿱…...
「Mac畅玩鸿蒙与硬件4」鸿蒙开发环境配置篇4 - DevEco Studio 高效使用技巧
本篇将进一步介绍如何在 DevEco Studio 中高效使用各种功能,通过掌握快捷键、代码补全、调试工具等,帮助开发者在鸿蒙应用开发中大幅提升工作效率。 关键词 DevEco Studio快捷键代码补全调试工具项目导航 一、快捷键与高效操作 快捷键是提升开发效率的…...
构建生产级的 RAG 系统
对 RAG 应用程序进行原型设计很容易,但要使其高性能、健壮且可扩展到大型知识语料库却很困难。 本指南包含各种提示和技巧,以提高 RAG 工作流程的性能。我们首先概述一些通用技术 - 它们按照简单到复杂的顺序进行排列。然后,我们将更深入地研…...
完全透彻了解一个asp.net core MVC项目模板2
这是《完全透彻了解一个asp.net core MVC项目模板》的第二篇,如果你直接进入了本篇博文而不知道上下文,请先阅读《完全透彻了解一个asp.net core MVC项目模板》的第一篇。 文章目录 一、补充几个问题1、有关导航链接和Tag Helper2、_ViewStart.cshtml与…...
uniapp 如何调用音频
uniapp调用音频 button点击 <view><button click"startPlay">开始播放</button></view>方法实现 startPlay() { const innerAudioContext uni.createInnerAudioContext();innerAudioContext.src /static/sounds/oqc.mp3;innerAudioContex…...
在Facebook运营中使用住宅IP的重要性
在当前社交媒体的浪潮中,Facebook作为全球最大的社交网络之一,吸引了数以亿计的用户。为了在这一平台上实现有效的运营和推广,越来越多的博主和营销人员正在寻求最佳的养号策略。其中,IP地址的选择显得尤为重要,尤其是…...
EJB项目如何升级SpringCloud
记录某金融机构老项目重构升级为微服务过程1 如何从EJB架构拆分微服务 这个非常有趣的过程,整个过程耗时大致接近半年时光,需要考虑到重构升级保留原来的业务线,而且还要考虑后续的维护成本,保留现有的数据库表结构,…...
HTTPS 协议原理
一.HTTPS的定义 大家在刚开始学习的时候是不是也是非常好奇HTTP与HTTPS之间有什么区别和联系,两者都是应用层协议,而HTTPS是在HTTP的基础上引入了加密层,从而将HTTP的明文传输进行加密,保障数据的安全性 二.加密与解密 定义&#…...
Vxe UI 表格行编辑(默认不显示编辑框,点击后可编辑)
效果: HTML代码:(type"integer"为这个,是限制只能输入正整数或负整数,英文和汉字自动转成0) <vxe-tableshow-overflowkeep-sourcev-loading"loading":data"ruleList"ref"Table":row-config"{isHover: true}"height"…...
移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展
10月27-30日,2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商,移远通信再次亮相,并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…...
爬虫利器playwright
是什么 它是微软在 2020 年初开源的新一代自动化测试工具,其功能和 selenium 类似,都可以驱动浏览器进行各种自动化操作。还可以录制脚本 案列-01 运行之后我们用它自动打开的谷歌浏览器,打开百度,输入漂亮小姐姐并查找&#x…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
