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

相关推荐
DolphinScheduler社区13 分钟前
大数据调度组件之Apache DolphinScheduler
大数据
SelectDB技术团队14 分钟前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris
panpantt3211 小时前
【参会邀请】第二届大数据与数据挖掘国际会议(BDDM 2024)邀您相聚江城!
大数据·人工智能·数据挖掘
青云交1 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:跨数据中心环境下的挑战与对策(上)(27 / 30)
大数据·性能优化·impala·案例分析·代码示例·跨数据中心·挑战对策
soso19682 小时前
DataWorks快速入门
大数据·数据仓库·信息可视化
The_Ticker2 小时前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
java1234_小锋2 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客2 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生2 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
jwolf22 小时前
摸一下elasticsearch8的AI能力:语义搜索/vector向量搜索案例
人工智能·搜索引擎