微服务--ES(Elasticsearch)

Elasticsearch是一个基于Lucene的分布式、高扩展、高实时的搜索与数据分析引擎。它位于Elastic Stack(以前称为ELK Stack)的核心,与Logstash(数据收集和日志解析引擎)和Kibana(分析和可视化平台)一起,为各种类型的数据提供近乎实时的搜索和分析能力。以下是对Elasticsearch的详细解析:

Elasticsearch的基本概念

  • 定义:Elasticsearch是一个开源的搜索引擎,它允许你以快速且近乎实时的方式存储、搜索和分析大量数据。无论是结构化还是非结构化数据,Elasticsearch都能高效地存储和索引。
  • 核心组件:Elasticsearch与Logstash和Kibana共同构成了Elastic Stack,提供从数据收集、处理、存储到分析和可视化的完整解决方案。

Elasticsearch的主要功能和特性

  1. 分布式架构
    • Elasticsearch是分布式的,意味着索引可以被分成分片,每个分片可以有0个或多个副本。这种设计使得Elasticsearch能够水平扩展,以处理大规模数据集。
    • 分片数在索引创建时指定,且后续不允许更改。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。
  2. 实时搜索和分析
    • Elasticsearch支持近实时的数据索引和搜索,用户可以在数据被索引后几乎立即进行搜索。
    • 它提供了丰富的查询DSL(领域特定语言),允许用户构建复杂的查询语句,以满足各种搜索需求。
  3. 可扩展性和高可用性
    • Elasticsearch的分布式特性使得其能够随着数据量和查询量的增长而无缝扩展。
    • 通过副本分片,Elasticsearch提高了数据的可用性和容错性,即使部分节点发生故障,也能保证服务的连续性。
  4. 数据聚合和可视化
    • Elasticsearch支持对数据进行聚合操作,如分组、统计、排序等,以生成复杂的分析报告。
    • 结合Kibana,用户可以对Elasticsearch中的数据进行交互式查询、可视化和分享。
  5. RESTful API
    • Elasticsearch通过HTTP/HTTPS协议提供RESTful API接口,使得与Elasticsearch的交互变得简单、统一且易于集成到各种应用程序中。

Elasticsearch的应用场景

  • 日志分析:Elasticsearch经常被用于实时日志分析,帮助开发人员和运维人员快速定位问题。
  • 全文搜索:对于需要全文搜索功能的网站或应用程序,Elasticsearch是一个理想的选择。
  • 数据分析:Elasticsearch的数据聚合和可视化功能使其成为数据分析领域的强大工具。
  • 实时监控系统:结合Logstash和Kibana,Elasticsearch可以构建实时监控系统,对系统性能进行实时监控和预警。

Elasticsearch和mysql的区别

Elasticsearch和MySQL是两种不同类型的数据库系统,它们在多个方面存在显著的区别。以下是它们之间的一些主要差异:

1. 用途和特点

  • MySQL
    • 是一种关系型数据库管理系统(RDBMS),用于存储结构化数据。
    • 提供ACID事务支持,适合需要强一致性和事务支持的应用程序。
    • 适用于事务处理和实时写入,能够提供较高的实时性。
  • Elasticsearch
    • 是一个基于Lucene的分布式搜索和分析引擎,专门用于处理非常大的文本数据集。
    • 专注于全文搜索、实时数据分析和日志搜索等用途。
    • 支持全文搜索和复杂的数据分析查询,提供分布式、高性能的全文搜索和分析功能。

2. 数据存储和模型

  • MySQL
    • 采用关系模型进行数据存储,使用表格进行数据的组织和存储。
    • 支持复杂的关系型查询和事务处理。
  • Elasticsearch
    • 采用文档型存储模型,以JSON格式存储文档。
    • 不支持事务,但提供了灵活的文档存储和高效的搜索能力。

3. 查询和性能

  • MySQL
    • 执行结构化的SQL查询,支持复杂的关系型查询语句。
    • 在处理简单的精确匹配查询时表现良好,特别是在数据量较小且建立了合适索引的情况下。
    • 对于全文搜索等需求支持较弱,需要额外的配置和优化。
  • Elasticsearch
    • 提供强大的全文搜索和文本分析功能,可以执行复杂的查询。
    • 支持多种类型的模糊搜索、聚合分析和实时数据分析。
    • 在处理大规模数据集和复杂查询时表现出色,特别是当数据量达到百万级甚至更高时。

4. 扩展性和灵活性

  • MySQL
    • 扩展性相对复杂,通常需要通过读写分离、分库分表等方式来提高性能。
    • 数据结构相对固定,需要事先定义好表结构。
  • Elasticsearch
    • 水平扩展容易,可以轻松地通过增加节点来扩展集群的容量和性能。
    • 数据结构灵活,不需要事先定义好数据结构,可以动态地添加或修改字段。

5. 适用场景

  • MySQL
    • 适合于需要强一致性和事务支持的应用场景,如金融交易系统、电商网站的订单和用户信息管理系统等。
  • Elasticsearch
    • 适合于全文搜索、实时数据分析和日志搜索等场景,如网站的搜索功能、数据分析平台、日志管理系统等。

Elasticsearch的安装

环境配置

  1. 安装Java环境
    • Elasticsearch是基于Java开发的,因此需要安装Java运行环境(JRE)或Java开发工具包(JDK)。
    • 建议安装JDK 1.8.0_73以上版本,并确保JAVA_HOME环境变量正确设置,同时%JAVA_HOME%\bin应被添加到系统的PATH环境变量中。
  2. 下载Elasticsearch安装包
    • 访问Elasticsearch的官方网站(Download Elasticsearch | Elastic)下载适合Windows系统的安装包。
    • 选择合适的版本进行下载,注意Elasticsearch的版本兼容性。

安装步骤

  1. 解压安装包
    • 将下载的Elasticsearch安装包解压到一个非中文且没有空格的目录下,例如D:\elasticsearch
  2. 配置Elasticsearch (可选):
    • 如果需要修改Elasticsearch的默认配置,可以编辑config\elasticsearch.yml文件。
    • 常见的配置项包括集群名称(cluster.name)、节点名称(node.name)、数据路径(path.data)、日志路径(path.logs)等。
  3. 启动Elasticsearch服务
    • 进入Elasticsearch的bin目录。
    • 双击elasticsearch.bat文件启动Elasticsearch服务,或者通过命令行运行elasticsearch.bat
    • 注意:如果是通过命令行启动,确保命令行窗口保持打开状态,否则Elasticsearch服务将停止。
  4. 验证安装
    • 打开浏览器,访问http://localhost:9200(或你配置的其他地址和端口)。
    • 如果看到Elasticsearch的响应信息(如版本号、集群名称等),则表示安装成功。

额外配置和插件安装

  1. 安装Elasticsearch-head插件 (可选):
    • Elasticsearch-head是一个Web界面的Elasticsearch集群管理工具,可以帮助用户更方便地管理和监控Elasticsearch集群。
    • 安装前需要安装Node.js和Grunt(一个JavaScript任务运行器)。
    • 下载Elasticsearch-head插件并解压,然后在插件目录下运行npm install安装依赖。
    • 运行npm run startgrunt server启动Elasticsearch-head服务。
  2. 安装IK分词器插件 (可选):
    • IK分词器是Elasticsearch的一个中文分词插件,可以提高中文搜索的准确性和效率。
    • 下载与Elasticsearch版本相匹配的IK分词器插件并解压到Elasticsearch的plugins目录下。
    • 重启Elasticsearch服务以使插件生效。

Elasticsearch安装kibana

下载Kibana

  1. 访问官网
  2. 选择版本
    • 根据你的Elasticsearch版本选择合适的Kibana版本。尽量保持Kibana和Elasticsearch的版本一致,或者确保它们之间的兼容性。
  3. 下载安装包
    • 下载对应版本的Kibana安装包,通常是一个压缩文件(如.tar.gz)。

解压Kibana

  1. 选择安装目录
    • 选择一个合适的目录来解压Kibana,通常建议选择非中文且没有空格的路径,例如/usr/local/kibana(Linux)或D:\kibana(Windows)。
  2. 解压文件
    • 使用适当的命令或工具解压Kibana安装包。在Linux中,可以使用tar -zxvf kibana-xxx.tar.gz命令;在Windows中,可以使用压缩软件如WinRAR或7-Zip进行解压。

配置Kibana

  1. 编辑配置文件
    • 进入Kibana的config目录,找到kibana.yml文件并使用文本编辑器打开。
    • 根据需要修改配置项,例如:
      • server.port: Kibana监听的端口号,默认为5601。
      • server.host: Kibana绑定的主机地址,可以是0.0.0.0(允许任何IP地址访问)或特定的IP地址。
      • elasticsearch.hosts: Elasticsearch节点的地址列表,格式为["http://host1:port1", "http://host2:port2"]
      • 其他配置项可以根据实际需要进行调整。
  2. (可选)配置权限
    • 如果Elasticsearch和Kibana不是以root用户运行的,确保Kibana的安装目录和配置文件具有适当的读写权限。

启动Kibana

  1. 切换到合适的用户 (如果非root用户):
    • 在Linux系统中,通常不建议以root用户运行Elasticsearch和Kibana。因此,你可能需要切换到非root用户或使用sudo命令以非root用户身份运行Kibana。
  2. 启动Kibana
    • 进入Kibana的bin目录。
    • 在Linux中,运行./kibana命令启动Kibana。如果需要使用后台进程运行,可以使用nohup ./kibana &命令。
    • 在Windows中,双击kibana.bat文件或使用命令行运行kibana.bat
  3. 验证安装
    • 打开浏览器,访问http://localhost:5601(或你配置的其他地址和端口)。
    • 如果看到Kibana的登录或主界面,则表示安装成功。

Elasticsearch安装ik分词器

环境准备

  1. 确认Elasticsearch版本
    • 在安装IK分词器之前,首先需要确认你的Elasticsearch的版本号。因为IK分词器的版本需要与Elasticsearch的版本相匹配或兼容。
  2. 下载IK分词器

安装IK分词器

  1. 创建插件目录 (如果尚未存在):
    • 在Elasticsearch的plugins目录下创建一个名为ik的文件夹,用于存放IK分词器的相关文件。例如,在Linux系统中,路径可能是/usr/share/elasticsearch/plugins/ik
  2. 解压IK分词器插件
    • 将下载的IK分词器插件压缩包解压到刚刚创建的ik文件夹中。在Linux系统中,可以使用unzip命令进行解压,如unzip elasticsearch-analysis-ik-x.x.x.zip -d /usr/share/elasticsearch/plugins/ik

配置(可选)

  • IK分词器通常不需要额外的配置即可使用,但如果你需要自定义词库或调整分词行为,可以在IK分词器的config目录下进行配置。

重启Elasticsearch

  • 安装完IK分词器后,需要重启Elasticsearch服务以使插件生效。在Linux系统中,可以使用systemctl restart elasticsearch命令重启Elasticsearch服务。

验证安装

  1. 检查插件列表
    • 重启Elasticsearch后,可以通过执行./elasticsearch-plugin list命令(在Elasticsearch的bin目录下)来检查已安装的插件列表,确认IK分词器是否已成功安装。
  2. 测试分词效果
    • 可以通过发送HTTP请求到Elasticsearch的_analyze API来测试IK分词器的分词效果。例如,使用curl命令发送一个包含中文文本的请求,并指定使用ik_max_wordik_smart分词器进行分词。
相关推荐
天天扭码18 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
余生H42 分钟前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
运维&陈同学2 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
Mephisto.java2 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe2 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码2 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
java1234_小锋11 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
哔哥哔特商务网14 小时前
一文探究48V新型电气架构下的汽车连接器
架构·汽车
007php00714 小时前
GoZero 上传文件File到阿里云 OSS 报错及优化方案
服务器·开发语言·数据库·python·阿里云·架构·golang