elasticsearch是一款开源的分布式搜索、存储、分析引擎;它目前的时效为近实时性的。Solar也是顶级的开源搜索引擎,也是基于lucene;elasticsearch与Solar相比安装更加简单,对于一些复杂的搜索支持更好,在大数据量下,elasticsearch的性能更好,现在被很多公司大量的使用。
我们可以看到数据库搜索引擎排名已经很高了
DB-Engines Ranking - popularity ranking of database management systems
2、Elasticsearch发展 2.1 Elasticsarch发展史2004年,shay banon基于lucene开发了compass。
2010年,shay banon重构了compass,取名为elasticsearch,使其支持分布式和水平扩展。
2012年,Elasticsearch BV公司被创建,围绕Elasticsearch及相关软件提供商业服务和产品。
2015年,Elasticsearch公司更名为Elastic.
Lucene 是一个高性能的搜索引擎库,它提供索引数据和搜索数据的功能,内部非常复杂,elasticsearch利用了lucene的高性能,封装了它的复杂性,对外可以提供rest接口,不同语言的应用都可以调用。
轶事:
2004年,shay banon失业了,准备给他厨师老婆做一个食谱的搜索引擎,如果直接使用Lucene很难,所以他把使用lucene抽象了一下,并开源了,开发者可以直接在程序里使用compass来进行搜索,2010年的时候,它已经重构了compass,取名为elasticsearch,支持分布式和水平扩展。
2.2 Elasticsarch重要版本Elastic的版本维护政策维护当前主要版本的最新次要版本,以及上一个主要版本的最新次要版本,例如7.10.2,7主版本,10为次要版本,2为修复bug的版本。它的具体的版本政策可以查看(https://www.elastic.co/cn/support/eol),elasticsearch主要版本特性如下:
在实际生产中推荐采用7.x,官方做了很多优化,性能更好,功能更强大。
3、Elasticsearch应用场景Elastic公司围绕着elasticsearch构建一整套生态系统,适用了很多热门的使用场景
3.1 Elastic生态圈2013年logstash被收购,同年kibana加入elastic公司,后续它陆续收购了beat、prealert(机器学习)等公司,将其纳入到elastic生态圈。
3.2 使用场景beats,轻量数据采集器,可收集文件、网络包等数据,它们安装在目标服务器作为代理,转发数据到logstash或elasticsearch上。
X-Pack,商业套件,提供了一些增值服务,有些组件也开源了。
-
网站搜索
设计了丰富的api来提供搜索服务,github、stackoverflow等网站的搜索都是基于elasticsearch。
-
日志
将分散的日志,集中化存储到elasticsearch上。
日志管理一般分为:日志收集,格式化,检索,风险告警。
-
数据库同步
通过某种同步机制将数据库某个表的数据同步到elasticsearch上,然后提供搜索服务。
-
指标分析
提供了分组查询、top查询、排序、相关度打分,可以进行数据分析
如上图所示,elasticsearch整体的功能划分:
-
restful api,表示提供rest风格的api来实现编程何管理
-
Transport, 网络传输模块,支持http,thrift等主流协议,默认tcp
-
scripting,脚本语言,支持使用groovy、painless等脚本语言
-
3rd plugin,支持第三方插件
-
Index module 索引文档、search module,搜索文档
-
River,支持接入其它数据源
-
Jmx,监控
-
Discovery,服务发现模块
-
Lucene directory,底层存储基于lucene实现
-
Gateway,可以持久化到本地或者其它文件系统
开发视角:
-
文档
可搜索的最小单位,我们向elasticsearch存储的一条数据,就是一个文档。每个文档都有一个id,可以自己指定,也可以让elasticsearch生成。
-
索引
索引是文档的容器,一类文档的集合。可以对文档元数据进行定义,比如名称、类型等。在物理上,索引的数据分布在分片上。
-
Type
在7.0以前,一个索引可以定义多个type,7.0版本后,type废除了,只有一个type为“_doc”。
系统视角:
-
集群
一个elasticsearch集群由多个节点构成,它的分布式架构支持存储水平扩容,并且依靠副本可用性也很高。
-
节点
一个节点就是一个elasticsearch实例,即一个java进程。节点根据功能可以划分多种角色,比如主节点、数据节点、协调节点、ingest节点等。默认一个节点这些角色都承担。
-
分片
为了解决数据水平扩展,通过分片将数据分散到集群的节点上。一个索引分片数的设计需要提前做好评估,太大和太小都不好,具体怎么评估,后续的文章会来探讨。
-
安装java8环境,7.0后的elasticsearch版本,内置了java环境
-
下载elasticsearch二进制文件(7.10.2)
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-10-2
-
启动elasticsearch集群(3节点)
启动命令:
bin/elasticsearch -E node.name=node0 -E cluster.name=mylocalcluster -E path.data=node0_databin/elasticsearch -E node.name=node1 -E cluster.name=mylocalcluster -E path.data=node1_databin/elasticsearch -E node.name=node2 -E cluster.name=mylocalcluster -E path.data=node2_data
-
接口查看状态
节点的状态(http://localhost:9200)
{ "name" : "node0", //节点名称 "cluster_name" : "mylocalcluster", //集群名称 "cluster_uuid" : "nTdmburYQPmB2Ppmw0UhiQ", "version" : { "number" : "7.10.2", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9", "build_date" : "2021-01-13T00:42:12.435326Z", "build_snapshot" : false, "lucene_version" : "8.7.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"}集群的状态(http://localhost:9200/_cat/nodes)
127.0.0.1 31 78 11 cdhilmrstw * node0 //*表示是主节点127.0.0.1 33 78 10 cdhilmrstw - node1127.0.0.1 33 78 9 cdhilmrstw - node2
集群的健康状态(http://localhost:9200/_cat/nodes)
{ "cluster_name": "mylocalcluster", "status": "green", //集群状态 "timed_out": false, "number_of_nodes": 3,//节点数 "number_of_data_nodes": 3,//数据节点数 "active_primary_shards": 0, "active_shards": 0, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "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": 100.0} -
安装kibana来管理elasticsearch
下载kibana安装包
https://www.elastic.co/cn/downloads/past-releases#kibana
配置
configkibana.yml配置指向elastisearch集群
elasticsearch.hosts: ["http://localhost:9200","http://localhost:9201","http://localhost:9202"] i18n.locale: "zh-CN"
启动kibana,执行命令bin/kibana
进入管理界面
http://localhost:5601
导入样本数据(可选,可以自己验证功能)
-
Kibana查看elasticsearch索引和数据
-
安装cerebro可视化的查看集群状态
-
下载https://github.com/lmenezes/cerebro/releases
-
cerebro-0.9.4confapplication.conf
-
修改配置文件
-
启动bincerebro.bat
-
查看管理界面http://localhost:9000
添加文档
POST user/_doc{ "name" : "xiao ming", "age" : 12}
注意post(自动生成id)、put(可以指定Id。如果id已经存在报错)效果是不一样的
查询文档
GET /user/_doc/2
更多的api可以查看官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs.html
6、总结本篇文章先是介绍了elasticsearch的发展历史以及重大版本说明,知道7.x版本以后已经不支持自定义type了。接着介绍了elascitc公司生态圈以及elasticsearch的使用场景,知道了elasticsearch主要用于全文检索、日志等热门的场景中。然后通过一个elasticsearch集群搭建和相关组件的安装,快速上手了下文档基础操作。最后对elasticsearch整体功能、集群、节点、分片等主要概念做了一些简单说明,这样我们对elasticsearch有了大概的了解。后面的文章会对elasticsearch的功能和核心原理进行进一步探讨。
文章导航
| 类别 | 标题 | 发布 |
| Redis | Redis(一):单线程为何还能这么快 | 己发布 |
| Redis(二):内存模型及回收算法 | 2021.10.22 | |
| Redis(三):持久化 | 2021.10.27 | |
| Redis(四):主从同步 | 即将上线 | |
| Redis(五):集群搭建 | 即将上线 | |
| Redis(六):实战应用 | 即将上线 | |
| Elasticsearch | Elasticsearch:概述 | 本文章 |
| Elasticsearch:核心 | 2021.10.25 | |
| Elasticsearch:实战 | 2021.10.29 | |
| Elasticsearch写入流程详解 | 即将上线 | |
| Elasticsearch查询流程详解 | 即将上线 | |
| Elasticsearch集群一致性 | 即将上线 | |
| Lucene的基本概念 | 即将上线 | |
| Elasticsearch部署架构和容量规划 | 即将上线 | |
| RocketMQ | RocketMQ—NameServer总结及核心源码剖析 | 2021.11.01 |
| RocketMQ—深入剖析Producer | 即将上线 | |
| Broker—启动流程源码解密 | 即将上线 | |
| Broker—接受消息处理流程解密 | 即将上线 | |
| Tomcat源码分析 | Tomcat(一):项目结构及架构分析 | 即将上线 |
| Tomcat(二):启动关闭流程分析 | 即将上线 | |
| Tomcat(三):应用加载原理分析 | 即将上线 | |
| Tomcat(四):网络请求原理分析 | 即将上线 | |
| Tomcat(五):嵌入式及性能调优 | 即将上线 | |
| Nacos | Nacos项目结构及架构分析 | 即将上线 |
| Nacos服务注册源码解析 | 即将上线 | |
| Nacos配置管理源码解析 | 即将上线 | |
| Nacos2.0版本优化功能解析 | 即将上线 | |
| Netty | 计算机网络&nio核心原理 | 即将上线 |
| 详细解读kafka是如何基于原生nio封装网络通信组件的? | 即将上线 | |
| netty初识之核心组件介绍 | 即将上线 | |
| 源码解析netty服务端,端口是如何拉起来的?新连接接入又如何处理? | 即将上线 | |
| 深入netty中各种事件如何在pipeline中传播的? | 即将上线 | |
| 网络编程中拆包粘包是什么?kafka以及netty是如何解决的? | 即将上线 | |
| 深入解读netty中最为复杂的缓存分配是如何进行的? | 即将上线 | |
| 源码分析netty、kafka、sentinel中不同时间轮实现方式以及细节 | 即将上线 | |
| 尝试从上帝角度对比kafka&netty中的性能优化,各种设计模式的丰富运用 | 即将上线 | |
| Netty在Rocketmq中的实践,RocketMq的消息协议解读 | 即将上线 | |
关注 “IT巅峰技术”,私信作者,获取以下2021全球架构师峰会PDF资料。



