1 Elasticsearch 的简单介绍
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例,而且作为Elastic Stack 的核心,它能够集中存储数据。
Elasticsearch 具有三大能力搜索、分析、存储。
Elasticsearch中的一些名词解释:
- Node: 单个 Elasticsearch 实例称为一个节点
- Cluster: 一组节点构成一个集群
- Shards: 分片,数据量过大时,受限于机器内存,磁盘处理能力,就会将数据分片
- Replicas: 备份(副本)。对主分片的数据备份,高可用
- Analyzer: 字段分词方式的定义,Elasticsearch默认的标准Analyzer包含一个标准的Tokenizer和三个Filter,即Standard Token Filter、Lower Case Token Filter和Stop TokenFilter
2 Elasticsearch 的核心
2.1 架构设计
2.2 存储
Elasticsearch是面向文档型数据库,ES存储的是JSON格式的数据
Elasticsearch中只有索引(Index)、类型(Type)、 文档(Docments)、字段(Field)等概念
2.3 搜索
Elasticsearch的搜索基于倒排索引,通过强大的分词器进行分词
并且Elasticsearch的设计思路是将搜索尽量在内存中完成,最大限度减少磁盘访问
注意事项:
- 不需要索引的字段,一定要明确定义出来,默认是自动建索引的,这样可以节约内存资源
- 对于String类型的字段,不需要Analysis的也需要明确定义出来,默认也是会Analysis的
- 选择有规律的ID很重要,随机性太大的ID(比如UUID)不利于查询
- 选择合适的分词器,会让搜索更为精准
2.4 分析
分析包含下面的过程:
- 首先,将文本分成适合于倒排索引的独立的词条 ;
- 之后,将词条统一化为标准格式以提高它们的 "可搜索性"或"查全率" 。
分析器负责执行上面的工作。 分析器实际上是将三个功能封装到了一个包里:
-
字符过滤器
首先,字符串按顺序通过每个字符过滤器 。
过滤器的任务是在分词前整理字符串。字符过滤器可以用来去掉特定符号,或者将字符转化,如
&
转化成and
。 -
分词器
其次,处理过的字符串会被分词器分为单个的词条。
-
Token 过滤器
最后,词条按顺序通过每个 token 过滤器 。
这个过程可能会改变词条(如,统一化大小写处理),删除词条(如,去掉 a, and, the等无用词),或者增加词条(如,增加同义词,提高可搜索性)。
3 Elasticsearch 的优缺点
优点:
- 支持分布式,可水平扩展;
- 提供了丰富的Restful接口,降低了使用门槛,可以被任何编程语言调用;
- 高可用,具有数据备份功能,可设置多个备份;
缺点:
- 数据一致性问题,容易发生脑裂;
- 没有权限管理;
4 Elasticsearch 的数据来源
不论我们想要使用Elasticsearch的哪个能力,前题就是有数据,那么Elasticsearch的数据来自哪里呢?这里我们就需要通过各种方式去将数据收集起来,一般情况下,我们使用可使用Logstash 从第三方数据存储库中拉取数据,也可以 使用Elastic 代理或 Beats 采集来自应用和基础架构的指标、日志、追踪和事件。
4.1 Elastic Agent
使用 Elastic 代理,您可以在每个主机上使用一个统一代理从任何地方收集所有形式的数据。集安装、配置和扩展于一体。
4.2 Beats
Beats 是一个面向轻量型采集器的平台。这些采集器可以从边缘机器向Logstash、ElasticSearch发送数据,它是由Go语言进行开发的,运行效率方面比较快。
4.3 Logstash
Logstash 是服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到不同的存储库中。
特性:
- 实时解析和转换数据;
- 可靠性、安全性,Logstash会通过持久化队列来保证至少将运行中的事件送达一次,同时将数据进行传输加密;
- 高可扩展性,插件很多;
4.4 阿里Canal(MySQL增量数据同步)
MySQL增量数据同步中间件,Canal可以把自己模拟成MySQL的一个从节点,它可以向MySQL主节点发送Dump协议的请求,然后MySQL接收到Dump请求,就会将Binary Log推送给Canal,Canal会解析数据,进行同步。
4.5 业务中融入对ES的增删改查
通过切面或者直接在业务代码中融入对ES的增删改查,虽然也能满足需求但是侵入性强不建议使用。
5 Elasticsearch的应用场景
- 搜索引擎(全文检索、高亮、搜索推荐)
- 海量数据存储(不适用于频繁更新、不支持事务控制),结合爬虫、日志收集系统效果更佳
- 数据分析(ELK日志分析)
6 ELK 集中式日志解决方案
ELK是Elasticsearch , Logstash, Kibana三个开源软件的简称,它为集中式的日志管理,日志分析提供了统一的解决方案。
集中式日志管理系统应该具备的特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到集中式的存储系统中
- 存储-能够存储大规模日志数据,并且能够便捷,快速的查询
- 分析-可以支持 可视化的分析报表
- 警告-能够提供错误报告,监控机制
近期评论