聊一聊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的原理与机制》

相关推荐
计算机毕设定制辅导-无忧学长1 小时前
TDengine 权限管理与安全配置实战(二)
大数据·安全·tdengine
2401_897930061 小时前
Kibana 连接 Elasticsearch(8.11.3)教程
大数据·elasticsearch·jenkins
计算机毕设定制辅导-无忧学长1 小时前
TDengine 快速上手:安装部署与基础 SQL 实践(一)
大数据·sql·tdengine
塔能物联运维2 小时前
塔能科技:精准节能,擎动工厂可持续发展巨轮
大数据·运维
今天我又学废了2 小时前
Spark,HDFS概述
大数据·hdfs·spark
视觉&物联智能3 小时前
【杂谈】-大型语言模型对具身人工智能发展的推动与挑战
人工智能·搜索引擎·语言模型·大模型·llm·具身人工智能
青云交3 小时前
Java 大视界 -- 基于 Java 的大数据机器学习模型在图像识别中的迁移学习与模型优化(173)
大数据·迁移学习·图像识别·模型优化·deeplearning4j·机器学习模型·java 大数据
Yan-英杰4 小时前
DeepSeek-R1模型现已登录亚马逊云科技
java·大数据·人工智能·科技·机器学习·云计算·deepseek
黄雪超4 小时前
Flink介绍——实时计算核心论文之Storm论文总结
大数据·论文阅读·storm
TDengine (老段)4 小时前
TDengine 中的日志系统
java·大数据·数据库·物联网·时序数据库·tdengine·iotdb