作者:手机用户2502860763 | 来源:互联网 | 2023-05-19 03:25
ElasticSearch
elasticsearch简介
elasticsearch是一个基于Lucene库的分布式,支持多租户的全文搜索引擎,也是数据分析引擎。
elasticsear
ElasticSearch
elasticsearch简介
-
elasticsearch是一个基于Lucene库的分布式,支持多租户的全文搜索引擎,也是数据分析引擎。
-
elasticsearch是由java开发实现的。
-
elasticsearch提供了REST接口和JSON文档,可以被任何编程语言调用
-
elasticsearch可以进行近实时搜索和分析任何类型的数据,无论是结构化数据,半结构化数据,非结构化数据。elasticsearch都可以高效地进行存储和快速搜索。
-
高性能,高可用(数据,服务),可水平扩展,易用
-
支持不同节点类型
elasticsearch的应用场景
-
在应用程序或网站上添加搜索功能
-
存储和分析日志、指标和安全事件数据
-
使用机器学习来实时自动建模数据的行为
-
使用Elasticsearch作为存储引擎来自动化业务工作流
-
使用Elasticsearch作为地理信息系统(GIS)管理、集成和分析空间信息
-
使用Elasticsearch作为生物信息学研究工具存储和处理遗传数据
elasticsearch家族
elasticsearch的生态圈
logstash
简介
特性
-
实时解析和转换数据
-
可扩展
- 支持200多个插件(日志,数据库,Arcsigh,Netflow)
-
可靠性,安全性
-
监控
kibana
简介
-
Kiwi fruit + Banana
-
数据可视化工具,帮助用户解开对数据的任何疑问
-
基于Logstash的工具
Beats层主要负责收集数据,可以直接存储到elastic search,也可以交给logstash进行解析过滤等处理操作,再存储到elastic search,elasticsearch就是存储引擎,提供api用于搜索数据,分析数据等操作,kibana与elasticsearch进行可视化交互。
elasticsearch的基本概念
Document
Document MetaData
"_index" : "movies",
"_type" : "_doc",
"_id" : "37475",
"_score" : 1.0,
"_source" : {
"genre" : [
"Drama"
],
"id" : "37475",
"year" : 2005,
"title" : "Unfinished Life, An",
"@version" : "1"
}
}
document metaData主要用于标注文档的相关信息
Index
-
index是document的容器,是一类document的结合
-
每个索引都有自己的mapping定义,用于定义包含的文档的字段名和字段类型
-
索引中的数据分散在Shard上,可以通过setting定义不同的数据分布
// index settings
{
"settings":
{
"index":
{
"creation_date": "1624690171977",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "HqFyAwvOQ8Ctfwy7Cbwz-A",
"version":
{
"created": "7090299"
},
"provided_name": "movies"
}
}
}
// index mapping
{
"mappings": {
"_doc": {
"properties": {
"@version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"genre": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"year": {
"type": "long"
}
}
}
}
}
Type
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组相同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台 并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
需要注意的是:
-
在7.0之前,一个index可以设置多个types
-
6.0开始,Type已经被Deprecated。7.0开始,一个索引只能创建一个Type – _doc
-
8.0将会被彻底被废弃
Cluster
# 查看集群状态
curl -i http://192.168.0.41:9200/_cluster/health
"cluster_name": "es_demo",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 7,
"active_shards": 7,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 1,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 87.5
}
Node
-
节点是一个elasticsearch实例,其本质也是一个java进程,一台服务器上可以运行多个elasticsearch进程,通过修改port,可以实现,但是生产环境一般建议一台机器上只运行一个elasticsearch实例。
-
每个节点都有名字,通过配置文件配置,或者启动的时候在命令行中加上-E node.name=node1
指定
-
每个节点在启动后,会分配一个unique id,保存在data目录下。
-
节点的分类有很多,不同的节点类型都有着不同的作用。
-
开发环境中一个节点可以承担多个角色,但是在生产环境中,应该设置单一的角色节点(dedicated node)
节点类型 |
配置参数 |
默认值 |
master-eligible node |
node.master |
true |
data node |
node.data |
true |
ingest |
node.ingest |
true |
coordinating only |
无 |
每个节点默认都是coordinating node。设置其他类型全部为false。 |
machine learning |
node.ml |
true(enable x-pack) |
Master Node & Master-eligible Nodes
-
每个节点启动后,默认就是一个master eligible node。可以通过配置文件设置node.master: false
禁止。
-
master eligible node 可以参加选主流程,成为master node。
-
当第一个节点启动的时候,它会将自己选举成master node。
-
每个node上都保存了集群的状态,只有master node才能修改集群的状态信息
Data Node & Coordinating Node
-
可以保存数据的节点,叫做data node。负责保存分片数据,在数据扩展上起到了至关重要的作用。
-
Coordinating node负责接受client的请求,将请求分发到合适的节点,最终把结果汇集到一起。
-
每个节点默认都起到了coordinating node的职责。
Hot & Warm Node
- 不同硬件配置的data node,可以用来实现hot & warm架构,降低集群部署的成本。
Machine Learning Node
Tribe Node
- Tribe node 连接到不同的es集群,并且支持将这个集群当成一个独立的集群处理。
Shard & Replica
elasticsearch vs rdbms
RDBMS |
ElasticSearch |
Table |
Index |
Row |
Document |
Column |
Field |
Schema |
Mapping |
SQL |
DSL |
elasticsearch高性能的全文检索,不支持事务,不支持JOIN