docker 安装elasticsearch 和kibana

294人浏览 / 0人评论

版本对应 

官网api

elasticsearch 介绍和原理

Elasticsearch 是一个高度可伸缩的开源全文搜索和分析引擎,它允许您快速地存储、搜索和分析大量数据。Elasticsearch 基于 Apache Lucene 构建,它是一个广泛使用的 Java 开源搜索库。以下是 Elasticsearch 的一些关键概念和原理:

基本概念

  1. 节点(Node):Elasticsearch 集群中的单个服务器实例。每个节点都负责存储数据、处理客户端请求以及与其他节点协作来确保集群的正常运行。
  2. 集群(Cluster):由一个或多个节点组成的 Elasticsearch 实例。集群可以横向扩展,以便随着数据量和查询负载的增长,能够保持良好的性能。
  3. 索引(Index):Elasticsearch 中用于组织和存储相关数据的容器。每个索引都有一个唯一的名称,可以包含一个或多个分片(shard)。
  4. 分片(Shard):索引数据的一个子集,可以分布在集群的多个节点上。分片是 Elasticsearch 实现水平扩展的关键机制,因为它们允许将数据分布在多个节点上,从而提高性能和容错能力。
  5. 副本(Replica):分片数据的副本。副本可以在不同的节点上存储,以提高数据的可用性和容错能力。至少应创建一个副本以防止数据丢失。
  6. 映射(Mapping):Elasticsearch 中索引的数据结构定义。映射包括字段名称、字段类型以及其他配置选项,这些选项决定了如何处理和存储数据。
  7. 文档(Document):在 Elasticsearch 中存储和索引的基本数据单位。文档是 JSON 格式的数据对象,它们包含一组字段和关联的值。每个文档都有一个唯一的 ID 和一个类型。

原理

  1. 倒排索引:Elasticsearch 使用倒排索引来支持高效的全文搜索。倒排索引是一种从词到文档的映射,它允许快速地找到包含特定词或短语的文档。当文档添加到索引时,Elasticsearch 会对文档的内容进行分词,并将分词后的词项添加到倒排索引中。
  2. 分布式搜索:Elasticsearch 是一个分布式系统,可以在多个节点上分布数据和查询负载。当接收到搜索请求时,Elasticsearch 会将查询分发到包含相关数据的所有分片。然后,每个分片执行请求,并将结果发送回协调节点,该节点负责合并和排序结果。
  3. 实时搜索:Elasticsearch 支持近实时搜索,这意味着新添加或更新的文档在短时间内(通常约 1 秒)就可以被搜索到。Elasticsearch 使用基于 Lucene 的刷新和提交机制来在保持高性能的同时,确保数据具有较高的实时性。
  4. 聚合和分析:除了基本的全文搜索功能外,Elasticsearch 还提供了强大的数据聚合和分析功能。聚合允许您对数据进行分组、统计和计算,从而为数据提供更深入的洞察力。
  5. 容错和恢复:Elasticsearch 集群可以自动检测并处理节点故障,从而确保数据的可用性和正常运行。当一个节点离线时,集群会将该节点上的分片重新分配给其他可用节点,并使用副本来恢复丢失的数据。此外,Elasticsearch 还支持快照和恢复功能,以备份和恢复整个集群或特定的索引。
  6. 扩展性:Elasticsearch 具有良好的水平扩展性,这意味着您可以通过添加更多的节点来应对数据量和查询负载的增长。当集群中的节点数量增加时,Elasticsearch 会自动重新分配分片和副本,以确保数据均匀分布在所有可用节点上。
  7. API 和客户端库:Elasticsearch 提供了丰富的 RESTful API,允许您使用各种编程语言和工具与之交互。此外,还有许多官方和社区维护的客户端库,它们简化了与 Elasticsearch 集群的交互并提供了更高级别的抽象。

使用场景

  1. Elasticsearch 由于其高度可扩展性和强大的全文搜索功能,在许多不同的场景中都得到了广泛的应用,包括:
  2. 站内搜索:为网站和应用提供高效、实时的全文搜索功能。
  3. 日志和事件数据分析:存储和分析大量的日志和事件数据,以便进行故障排查、安全审计和性能监控。
  4. 实时数据分析:对实时产生的数据进行分析和聚合,以提供实时的业务洞察和监控。
  5. 推荐系统:基于用户行为和内容特征构建个性化的推荐系统。
  6. 地理空间搜索:存储和查询具有地理位置信息的数据,如地点、路线和区域。
  7. 文档存储和检索:作为一个分布式的文档存储系统,用于存储和检索结构化和半结构化数据。
  8. 以上就是 Elasticsearch 的一些关键概念、原理和应用场景。由于其强大的功能、高性能和易用性,Elasticsearch 已经成为全文搜索和大数据分析领域的主流技术之一。

Elasticsearch对应MySQL的对应关系

  1. 索引(Index):在 Elasticsearch 中,索引是用于存储和组织相关数据的容器。在 MySQL 中,索引通常是一个数据库表。
  2. 文档(Document):在 Elasticsearch 中,文档是 JSON 格式的数据对象,是数据存储和检索的基本单位。在 MySQL 中,文档对应的是表中的一行数据。
  3. 字段(Field):在 Elasticsearch 中,字段是文档中的一个数据项,由名称和值组成。在 MySQL 中,字段对应的是表中的一列。
  4. 映射(Mapping):在 Elasticsearch 中,映射定义了索引中文档的数据结构(字段名称、字段类型等)。在 MySQL 中,这类似于表的结构定义(列名、数据类型等)。
  5. 主键(Primary Key):在 Elasticsearch 中,每个文档都有一个唯一的 ID。在 MySQL 中,每个表中的一行数据都有一个或多个主键,用于确保数据的唯一性。

elasticsearch 和kibana 安装

1. 拉取 Elasticsearch 镜像

拉去elasticsearch镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.0

 运行 elasticsearch容器

2.运行 Elasticsearch 容器

设置为单列模式 -e "discovery.type=single-node"

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.14.0

3. 拉取 Kibana 镜像

ocker pull docker.elastic.co/kibana/kibana:7.14.0

4. 运行 Kibana 容器

创建软连接-link elasticsearch

docker run -d --name kibana --link elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:7.14.0

5. 将 kibana设置中文(可选)

进入容器内部
docker ps
docker exec -it container_id /bin/bash

修改配置文件
在config文件夹中找到kibana.yml文件,并用文本编辑器打开。

在文件中找到i18n.locale属性,并将其值更改为zh-CN,表示设置为中文。如果找不到该属性,可以在文件中添加以下行:

i18n.locale: "zh-CN"

简单API使用

 

1.创建index以及mapping(相当于mysql table 和table中的字段类型)

PUT /my_index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      }
    }
  }
}

2.创建doc 相当于数据数据库的一条数据(创建的时候一般要指定id,不指定会自己生成,这个id一般对应数据库中的id,后期的增删改都要通过id来操作)

PUT my_index/_doc/1
{
  "name": "王艳",
  "age": 1
}

3.跟新文档(通过id跟新数据, 相当于数据库的根据id跟新数据)

POST my_index/_update/1
{
  "doc": {
    "age": 1
  }
}

// 将某一个字段删除

POST my_index/_update/2
{
  "script": {
    "source": "ctx._source.remove('age')"
  }
}

4.删除文档(根据id删除,相当于数据中根据id删除一条数据)

DELETE my_index/_doc/2

5.查询文档(相当于数据库查询一个表的数据)

GET /my_index/_search
{
  "query": {
    "match": {
      "name": "王"
    }
  }
}

什么样的场景需要用到es?

Elasticsearch(简称 ES)是一种分布式、高可扩展、高可用的实时搜索和分析引擎。它基于 Apache Lucene 构建,通常用于以下场景:

  1. 全文搜索:Elasticsearch 提供了强大的全文搜索功能,包括模糊匹配、近义词、排序、过滤等,非常适合为网站、应用或其他服务提供高效的搜索体验。
  2. 日志分析和监控:ES 可以用于存储、搜索和分析大量的日志数据。结合 Logstash(日志收集工具)和 Kibana(数据可视化工具),它们构成了著名的 ELK(Elasticsearch, Logstash, Kibana)技术栈,广泛应用于 IT 运维、应用性能监控(APM)和安全事件管理(SIEM)等场景。
  3. 实时数据分析:Elasticsearch 可以对实时数据进行聚合和分析,以获取即时的见解。这对于实时推荐系统、实时业务指标监控、实时异常检测等场景非常有价值。
  4. 数据可视化:通过 Kibana,您可以轻松地为 Elasticsearch 中的数据创建仪表板和可视化。这有助于洞察数据趋势、发现模式,并支持数据驱动的决策。
  5. 地理空间数据分析和搜索:Elasticsearch 支持地理空间数据类型和查询,使其成为地理空间数据搜索和分析的理想解决方案。例如,查找特定范围内的地点、计算两点间的距离等。
  6. 自动完成和拼写检查:Elasticsearch 提供了用于实现自动完成(类型即查找)和拼写建议的功能,可以帮助您创建更智能、更友好的搜索界面。
  7. 备份和恢复:Elasticsearch 提供了快照和恢复功能,以便您可以轻松备份和恢复数据。

这些只是 Elasticsearch 的一些典型应用场景。实际上,Elasticsearch 可以应用于许多其他场景,涉及数据存储、搜索和实时分析。

这些 Elasticsearch 应用场景的关键特点如下:

  1. 全文搜索:关键特点包括高度相关的搜索结果、支持复杂的查询和过滤、以及快速响应时间。全文搜索需要对大量非结构化或半结构化文本数据进行高效、实时的搜索。
  2. 日志分析和监控:关键特点是处理和分析大量的实时或历史日志数据,通常要求能够对数据进行实时聚合,以便快速检测问题、发现趋势和异常。
  3. 实时数据分析:关键特点是处理海量的实时数据流、低延迟的查询和分析,支持各种聚合操作以获取实时见解。
  4. 数据可视化:关键特点是将复杂的数据集可视化,支持各种图表类型、仪表板和自定义展示方式,以便用户可以快速理解数据并洞察趋势。
  5. 地理空间数据分析和搜索:关键特点是支持地理空间数据类型(如地理坐标)、地理空间查询(如距离查询、范围查询等)和地理空间分析功能。
  6. 自动完成和拼写检查:关键特点是提供快速、准确的搜索建议,以便用户在输入过程中获得实时的搜索结果和拼写建议。
  7. 备份和恢复:关键特点是能够轻松创建数据快照、将数据备份到远程存储、并在需要时恢复数据,以确保数据安全和持久性。

这些场景在不同程度上都依赖 Elasticsearch 的以下核心能力:

高速搜索和实时分析
分布式和高可扩展性
高可用性和容错
灵活的数据模型和丰富的查询语言
集成数据可视化和管理工具(如 Kibana)
通过充分利用这些能力,Elasticsearch 可以满足各种数据密集型场景的需求。

这些场景在不使用es的情况下会暴露什么问题以及什么条件下会暴露?

  1. 全文搜索:传统数据库通常在全文搜索方面性能较差,难以处理模糊匹配、近义词、排序和过滤等复杂查询。此外,搜索性能可能难以满足实时响应的需求。
  2. 日志分析和监控:在没有专用日志分析工具的情况下,手动分析和管理大量日志数据可能非常耗时且容易出错。另外,传统数据库可能无法有效地处理实时数据聚合,导致问题检测和异常发现的延迟。
  3. 实时数据分析:传统数据库在实时数据分析方面可能性能不佳,难以满足低延迟查询和实时聚合的需求。这可能导致实时推荐、监控和异常检测等场景的响应变慢。
  4. 数据可视化:在没有专用数据可视化工具的情况下,创建和管理复杂的图表和仪表板可能非常困难。这可能导致团队无法充分利用数据驱动的决策过程。
  5. 地理空间数据分析和搜索:传统数据库可能没有对地理空间数据类型和查询的原生支持,这可能导致地理空间数据分析和搜索的性能低下和功能受限。
  6. 自动完成和拼写检查:在没有专门的搜索建议和拼写检查功能的情况下,为用户提供快速、准确的搜索建议可能非常困难。这可能导致搜索体验较差。
  7. 备份和恢复:在没有专用备份和恢复工具的情况下,手动备份和恢复数据可能非常耗时且容易出错。这可能导致数据丢失和损坏的风险增加。

这些问题通常在以下条件下更容易暴露:

数据量大:随着数据量的增加,传统数据库在搜索、分析和管理方面的性能可能会急剧下降。
实时性要求高:对于实时场景,如实时推荐、监控和异常检测等,低延迟查询和分析的能力至关重要。
复杂查询:当需要执行复杂的查询和过滤时,传统数据库可能难以满足性能和功能需求。
高并发:在高并发场景下,传统数据库可能难以保持稳定的性能和响应速度。
可扩展性要求高:对于需要灵活扩展的场景,传统数据库可能无法满足水平扩展和容错的需求。
在这些条件下,使用 Elasticsearch 可以有效地解决上述问题,提高搜索、分析和管理数据的性能和效率。

使用es后,会带来哪些挑战?怎么应对?

  1. 资源消耗:Elasticsearch 可能会占用较多的内存和 CPU 资源。为了应对这个问题,可以根据实际需求权衡性能和资源消耗,合理配置 Elasticsearch 的参数。例如,可以调整分片数量、副本数量和缓存大小等。
  2. 数据同步:在使用 Elasticsearch 时,需要将原始数据源与 Elasticsearch 保持同步。为了解决这个问题,可以使用 Logstash、Kafka Connect 或自定义程序等工具进行数据同步。
  3. 集群管理:Elasticsearch 集群的管理可能相对复杂。为了简化集群管理,可以使用 Elasticsearch 的管理工具,如 Kibana、Elastic Cloud 或第三方工具等。此外,可以定期检查集群的健康1状态,并根据需要调整集群配置。
  4. 数据安全:使用 Elasticsearch 时需要确保数据安全。为了提高数据安全性,可以使用 X-Pack Security 插件或第三方安全插件,提供基于角色的访问控制、加密通信和审计日志等功能。同时,定期备份数据以防止数据丢失。
  5. 性能优化:Elasticsearch 的性能可能会受到查询复杂度、索引设计和集群配置等因素的影响。为了提高性能,可以根据实际需求优化查询语句、索引设计和集群配置。例如,使用更精确的查询类型、合理划分字段和调整映射设置等。
  6. 高可用性:为了确保 Elasticsearch 集群的高可用性,需要合理配置分片和副本策略。可以根据实际需求设置分片数量和副本数量,以提高数据冗余和容错能力。同时,监控集群的健康状态,并在出现问题时及时进行故障转移。
  7. 学习曲线:Elasticsearch 的学习曲线可能相对陡峭。为了降低学习成本,可以参考官方文档、教程和社区资源等,逐步了解 Elasticsearch 的核心概念、功能和最佳实践。

通过以上方法应对这些挑战,可以更好地利用 Elasticsearch 的强大功能,提高数据搜索、分析和管理的效率。


 

全部评论