Elasticsearch + Kibana简介
Elasticsearch是一个分布式的开源搜索和分析引擎,基于Apache Lucene开发而成,是elastic stack的核心组件。它是一个近实时的分布式搜索和分析引擎,在处理大数据方面相当擅长。
Elasticsearch不会将信息存储为类似数据库的行(row),而是存储为已序列化为JSON文档的复杂数据结构。当集群中有多个Elasticsearch节点时,存储的文档会分布在整个集群中,并且可以从任何节点立即访问。存储文档后,将在1s内(默认刷新频率为1s)几乎实时地对其进行索引和完全搜索。
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana可以通过各种图表进行高级数据分析及展示。
ES的特点
- 实时搜索、实时分析;
- 分布式架构、实时文件存储,并将每一个字段都编入索引;
- 文档导向,所有的对象全部是文档;
- 高可用性、易扩展、支持集群(cluster)、分配和复制(shards and replicas)
- 接口友好,支持json
Elasticsearch基本概念名词
集群(cluster)
集群中有多个节点(node),其中有一个为主节点,主节点通过选举产生;主从节点是相对于集群内部来说的。ES是一个去中心化的,没有中心节点,这个概念是相对于外部集群来说的。从外部来看,与任何一个节点的通信与ES集群通信是等价的。
索引(index)
ES将数据存储在一个或者多个索引(index)中,索引的概念类比于数据库,可以向索引中写入文档或者从索引中读取文档,并通过ES内部使用Lucene将数据写入索引或从索引中读取数据。
ES使用倒排索引(Inverted Index)来做快速的全文搜索,但是一般MySql数据库的索引,用B-Tree来实现。
ES是面向文档的,文档归属于一种类型(type),而这些type存在索引index中。传统关系数据库和ES的简单对比如下(6.0版本后默认支持single type):
| Relational DB | Databases | Tables | 表结构 | Rows | Columns |
|---|---|---|---|---|---|
| ElasticSearch | Indices | Type | 映射Mapping | Documents | Fields字段 |
Q:doc -> index 类同于 row -> table吗?
A:并不类同于,在doc与index中间还存在一个shard分片的概念
对于一个搜索引擎来说,光有数据结构是远远不够的;映射是es区别于数据库的重要特征之一。映射的过程可以看做建表的过程,但是与数据库的却比:映射可以为一个字段建立不同的字段以满足不同的场景,可以对数据进行清洗、容错,建立倒排索引等。
文档(document)
文档(document)是ES中的主要实体。对所有使用ES的案例来说,他们最终都可以归结为对文档的搜索,文档由字段构成。
映射(mapping)
所有文档写进索引之前,均会先进行分析。如果将输入的文本分割为词条,那些词条又会被过滤。这种行为称为映射,通常由用户自己定义。
分片(shards)
分片为索引分片,ES可以把一个完整的索引分成多个分片。好处是:可以把一个大索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在创建索引前指定,并且在创建索引后不能更改。
副本(replicas)
ES可以设置多个索引副本,对于副本的作用:
- 提高系统的容错性,当某个节点某个分片损坏或者丢失时,可以从副本中恢复数据;
- 提高ES的查询效率,ES会自动对搜索请求进行负载均衡。
分片与副本
一个索引可以存储超过单个节点硬件限制的大数据量。eg:一个具有10亿文档的索引占据1T的磁盘空间,但是任意一个节点没有这么大的存储或单个节点处理搜索请求,相应太慢。
为了解决这个问题,ES提供了将索引划分为多片的能力,称为分片。每个分片是一个功能完备且独立的"索引",这个索引可以被放置到集群的任何节点上。
副本的价值:1、在分片/节点失败的情况下,副本提供了高可用性。副本分片不与原分片在同一个节点上是非常重要的。2、提升搜索的吞吐量。搜索可以在所有副本上并行运行,副本可以扩展吞吐量。
数据恢复(recovery)
数据恢复又称为数据重新分布,ES在有节点退出或者加入时,会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复;
命令:GET /_cat/health?v #可以查看集群的状态
数据源(river)
数据源是从其他方式(eg:数据库同步)同步数据至ES的方法,以插件的方式存在的ES服务。通过读取river中的数据并把它索引到ES中。低频使用功能。
网关(gateway)
网关代表的是ES索引的持久化存储方式,ES默认是先把索引放到内存中,当内存满了时再持久化到硬盘。当ES集群关闭再重启的时候,就会从gateway读取索引数据。
ES支持多种gateway类型,eg:本地文件系统(默认)、分布式文件系统、hdfs、s3云存储服务等。
自动发现(discovery.zen)
自动发现代表ES的自动发现节点机制,ES是一个基于P2P的系统。通过广播寻找存在的节点,再通过多播协议进行节点间的通信,同时也支持点对点的交互。
在5.X版本中,关闭广播模式,需要自定义通讯的主机。
通信(transport)
通信代表ES内部节点或集群与客户端的交互方式,默认内部使用的是tcp协议进行交互,同时支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等传输协议。
节点间通信的端口默认:9300-9400
Elasticsearch分布式的好处
ES支持集群模式,是一个分布式系统。ES集群由多个ES node实例组成,其好处重要有两个:
- 方便扩展,增大系统容量。如内存、磁盘,使ES集群可以支持PB级数据
- 提供系统可用性,即使部分节点停止服务,整个集群依然可以正常服务。
不同集群通过集群名字来区分,可通过cluster.name进行修改,默认为elasticsearch。每个ES实例本质上是一个JVM进程,且有自己的名字,通过node.name修改。