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

聊一聊Elasticsearch的一些基本信息

一、Elasticsearch是什么

Elasticsearch简称ES,是一款分布式搜索引擎。它是在Apache Lucene基础之上采用Java语言开发的。

Elasticsearch的官方网站对它的解释是:Elasticsearch是一个分布式、RESTful的搜索和数据分析引擎。

通过上边的官方解释,我们可以看出ES提供两大功能:数据的搜索和分析。

二、Elasticsearch的使用场景

  1. 在线实时日志分析:从最初的ELK到目前的Elastic Stack,包含了在线日志采集、存储和分析等功能。
  2. 物联网数据监控
  3. 文献检索和文献计量
  4. 商务智能(business intelligence,BI)大屏展示

三、Elastic Stack

对于ES的接入方式来说,除了用自己手写的应用程序去写入ES这种方式以外,我们还以使用官方提供的数据采集工具以及第三方的ETL工具来把数据写入到ES中。

官方早期提供了Logstash来作为接入工具去完成进行数据采集和转换的工作。由于运行时比较消耗资源,官方后续推出了一系列命名包含beat的轻量级数据采集器,统称为Beats,我们可以理解为Beats分包了Logstash的数据采集功能。

我们可以通过Beats将采集到的数据数据先汇集到Logstash中再写入到ES,也可以直接通过Beats将采集到的数据直接写到ES中,如下图:
在这里插入图片描述
在这里插入图片描述

四、专有名词介绍

  1. 集群(cluster):多个安装Elasticsearch的服务器具有相同的集群名称,则这些服务器组成一个集群,统一对外提供服务。一个集群中有且只有一个主节点,当主节点挂掉了则会选举出一个新的主节点来维持集群的运转。
  2. 节点(node):一个安装了Elasticsearch的服务机就是一个节点,它是组成集群的基本单元。
  3. 索引(index):用来存储数据,可以简单的理解为关系型数据库中的表。
  4. 文档(document):写入索引的基本单元,一个文档就是索引中的一条数据。
  5. 分片(shard):对于一个索引来说,会有一个主分片和与它对应的零个或多个副本分片。一个分片本质上就是一个Luncene索引。为了保证分片在集群内分布均匀,分片会在集群中进行移动,这个过程就是分片的分配。索引的主分片和副本分片不能位于同一个节点上,我们要保证节点宕机的时候,主分片和副本分片不能同时丢失。
  6. 主分片(primary shard):负责将文档数据写入索引,同时将数据同步给副本分片。主分片的数量在创建索引的时候就确定了,不允许修改。通常主分片的数量与索引存储数据的数据量成正比。
  7. 副本分片(replica shard):作为主分片的一个副本,可以承担一部分数据查询的请求(提供搜索的吞吐量),还具有容灾备份的能力,当主分片丢失了(例如:所在节点宕机),副本分片可以被选举为新的主分片来保持数据的完整性。相较于主分片的数量确定后就不可修改,副本分片的数量可以随时修改。
  8. 分片恢复(shard recovery):将一个分片的数据同步到另外一个分片上的过程,称为分片恢复,这个过程通常伴随着创建和分配。只有等到分片恢复后,副本分片才能对外提供搜索服务。
  9. 索引缓冲区(index buffer):写入索引的数据会先写入索引缓冲区中,当缓冲区满了的时候,缓冲区中的数据才会被写到磁盘上。
  10. 传输模块(transport module):当一个节点接收到请求后无法处理或者无法单独处理的时候,会将这个请求转发给其他节点,节点之间相互通讯是通过传输模块来完成的。
  11. 网关模块 (gateway module):网关模块存储着集群的信息以及每个索引分片的持久化数据。默认使用的是本地网关,它会把数据存储到本地文件系统中。
  12. 节点发现模块(node discovery module):用于节点之间相互识别,将新的节点加入到集群中。
  13. 线程池(thread pool):ES内提供了很多用于处理不同操作的线程池,例如:analyze线程池用于处理文本分析的请求,write线程池用于处理索引数据的写入请求,search线程池用于处理搜索请求。

五、配置JVM的堆内存大小

在ES节点上有三个重要的配置文件: elasticsearch.yml用于配置节点的参数、jvm.options用来配置Elasticsearch运行时占用的堆内存大小、log4j2.properties用来配置Elasticsearch运行时的日志参数。

我们通过jvm.options配置文件来设置ES运行时JVM堆内存的大小。如果JVM堆内存设置过小,可能查询时内存不够导致宕机;如果设置过大,又会超过JVM用于压缩对象指针的阈值而导致内存浪费。

设置JVM堆内存大小需要满足以下2个条件

  1. 堆内存最大不得超过开启压缩对象指针的阈值,一般最大可以是31GB(不同的系统可能有区别)。

  2. 在堆内存不超过上述阈值的前提下,其大小可以设置为其所在节点内存的一半。

    例如,你的服务器有16GB内存,就可以把堆内存大小设置为8GB,但是如果服务器内存为128GB,则通常堆内存最多只能设置为31GB。

    默认JVM堆内存的大小为1G。

六、参考文献

  • 《Elasticsearch数据搜索与分析实战》——王深湛

下一篇:《聊一聊Elasticsearch的原理与机制》


http://www.kler.cn/a/371176.html

相关文章:

  • thinkphp6 redis 哈希存储方式以及操作函数(笔记)
  • 如何使用python完成最简单的数据预测?
  • PART 1 数据挖掘概论 — 数据挖掘方法论
  • 前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML
  • 基于SpringBoot的“时间管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 2D拓扑图
  • 【数据结构 | PTA】与零交换
  • MATLAB基础应用精讲-【数模应用】PageRank(附R语言、MATLAB、Java和python代码实现)
  • 数字身份发展趋势前瞻:无密码认证
  • 哈工大《理论力学》第九版课后答案解析及笔记PDF
  • Java Lock ReentrantLock 源码
  • Redis的删除策略以及内存淘汰机制
  • 探索 Surya:一款强大的开源 OCR 工具,支持 90 多种语言识别
  • C#实现word和pdf格式互转
  • STM32中的__HAL_RCC_GPIOA_CLK_ENABLE(); 这个为什么和普通的库函数不一样,前面有两个下划线?
  • OTX系统架构分析
  • 微服务架构:解密微服务的基本概念
  • 【案例】三维物体描边
  • pyav保存视频
  • RN如何实现页面渐变背景
  • 探索 MongoDB 的奇幻世界:路由、分片与节点的三重奏
  • asp.net Core日志 ILoggerFactory、ILogger、ILoggerProvider
  • C++第4课——swap、switch-case-for循环(含视频讲解)
  • 【机器学习】环境搭建及Sklearn鸢尾花数据集
  • 字节青训营 | 数字分组求偶数和
  • 【C++指南】类和对象(五):类的默认成员函数——全面剖析 赋值运算符重载函数