ELK相关知识点

ELK

何为 ELK,Elasticsearch + Logstach + Kibaba

  • Elasticsearch:存储,计算,搜索数据
  • Logstash:数据抓取
  • Kibaba:数据可视化

倒排索引

要说倒排索引,首先要从正向索引谈起,比如 MySQL

MySQL 这类关系型数据库,如果搜索 ID,会直接走索引(索引设置得正确的前提下),一旦走了索引,查询起来是很快的,但是如果是模糊查询,就不一定了,需要逐行扫描,在索引设置得不好的情况下,需要全表扫描,数据量大的场景下效率非常低

倒排索引中有两个重要的概念:

  • 文档(Document):ES 里保存的数据,其中的每一条数据就是一个文档,类似数据库的一条记录
  • 词条(Term):对数据进行分词后得到的有意义的词语

倒排索引是对正向索引的一种特殊处理:

  • 将文档数据利用分词算法,得到一堆的词条
  • ES 里保存的每行数据包括词条,词条所在文档 ID 等信息
  • 因为词条具有唯一性,可以给词条创建索引

搜索流程:

  • 发起搜索请求
  • 分词得到词条
  • 根据词条拿到 ES 里的文档 ID(这个 ID 会和 MySQL 里的 ID 同步)
  • 根据 ID (去 MySQL)拿到具体数据

虽然需要查两遍,先查倒排索引,再查正向索引,但因为都走了索引,所以非常快,无需全表扫描

两者的关系如下表

MySQLElasticsearch
tableindex
rowdocument
columnfield
schemamapping
sqldsl

两者不能比较,关注的领域不同,MySQL 擅长事务类型操作,可以确保数据的安全和一致性,ES 则擅长海量数据的搜索,分析,计算,实际上往往两者结合使用

IK 分词器

  • ik_smart:只能切分,粗粒度
  • ik_max_word:最细切分,细粒度

ES 搜索高亮

  • 给文档中的关键字加一个标签
  • 页面给这个标签设置 高亮 CSS

ES 集群

不管什么集群,集群无非解决几个问题

  • 海量数据存储
  • 单点故障

ES 通过对数据进行分片,存储到不同的节点中,将备份放到对方节点,完成互相备份,当集群中的某个节点挂掉后,会立即将挂掉的节点上的分片数据迁移到其他节点,确保数据安全

集群监控

可以使用 Kibana 直接操作,或者 Cerebro