Elasticsearch是著名的开源分布式搜索和数据处理平台,是一个基于Lucene的分布式、实时、全文搜索系统,其稳定、可靠、高可用、可大规模扩展等特性,使得Elasticsearch的应用十分广泛。特别是结合Logstash、Kibana形成的ELK套件,更是在日志收集和可视化场景被大规模应用。
本文是Elasticsearch系列的第一篇,将会重点介绍Elasticsearch的核心特性以及应用场景。
01
Elasticsearch是什么?
Elasticsearch是一个开源的分布式搜索引擎,构建于Apache Lucene之上,提供出色的搜索功能,目前被业界广泛应用于日志系统、搜索推荐系统等场景,经历了众多大型互联网公司的实践检验,是大数据处理领域举足轻重的一员。
02
Elasticsearch的特性
- 实时
理论上数据从写入Elasticsearch到数据可以被搜索只需要1秒左右的时间,实现准实时的数据索引和查询。 - 分布式、可扩展
天生的分布式的设计,数据分片对于应用层透明,扩展性良好,可以轻易的进行节点扩容,支持上百甚至数百的服务器节点,支持PB级别的数据存储和搜索。 - 稳定可靠
Elasticsearch的分布式、数据冗余特性提供更加可靠的运行机制,且经过大型互联网公司众多项目使用,可靠性得到验证。 - 高可用
数据多副本、多节点存储,单节点的故障不影响集群的使用。 - Rest API
新版本的Elasticsearch提供标准的Rest API,这使得所有支持Rest API的语言都能够轻易的使用Elasticsearch,具备多语言通用的支持特性,易于使用。 - 高性能
Elasticsearch底层构建基于Lucene,具备强大的搜索能力,即便是TB级别的数据依然能够实现秒级的搜索。
03
Elasticsearch应用场景
- 作为独立数据库系统
Elasticsearch本身提供了数据持久化存储的能力,并且提供了增删改查的功能,在某些应用场景下可以直接当做数据库系统来使用,既提供了存储能力,又能够同时具备搜索能力,整体技术架构会比较简单,例如博客系统、评论系统。需要注意的是,Elasticsearch不支持事务,且写入的性能相对关系型数据库稍弱,所有需要使用事务的场景都不能将Elasticsearch当做唯一的数据库系统,这使得这种使用场景很少见。
- 搭建日志系统
日志系统应该是Elasticsearch使用最广泛的场景之一了,广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash进行日志收集,Elasticsearch存储和查询应用日志,Kibana提供日志的可视化搜索界面。
- 搭建数据分析系统
Elasitcsearch支持数据分析,例如强大的数据聚合功能,提供诸如直方图、统计分组、范围聚合等方便使用的功能,能够快速实现一些数据报表等功能。 - 搭建搜索系统
Elasticsearch为搜索而生,用于搭建全文搜索系统是自然而然的事情,它能够提供快速的索引和搜索功能,还有相关的评分功能、分词插件等,支持丰富的搜索特性。这种情况下,一般作为系统的一部分与其他组件搭配使用,典型的应用场景如:
- 同步Mysql的数据到Elasticsearch中,Elasticsearch提供普通的查询功能,Mysql提供事务写操作。
- 同步Hbase的数据到Elasticsearch,查询时先通过查询Elasticsearch获取到Hbase的rowkey,再通过rowkey到Hbase中查询到完整数据。
这种应用场景下,实际上是将Elasticsearch优秀的全文搜索的性能与其他组件的优秀特性结合起来,例如Mysql事务特性,Hbase海量数据存储的特性等。每个组件都有自己独有的特性,没有完全一站式搞定所有功能的组件存在,利用好组件的各个特性,结合使用,才是使用开源组件的正确姿势。Elasticsearch最强大的特性是"搜索"。