前言
ES是一款开源的分布式搜索框架,它是一个存储数据、检索数据、分析数据的综合体。
es 和 mysql 之间的数据同步分 全量 和 增量。
binlog订阅
binlog 用于实时记录 mysql 数据产生的一些变化,然后通过 mysql 的主从复制协议,自己实现一个客户端和 mysql 的主节点进行连接,其实就是把自己伪装成一个 slave 节点,接下来主节点就会把数据变更事件发送给从节点。
把mysql一系列的数据更改事件收集到binlog的同步组件,然后交给下游的客户端去消费。
开源中间件logstash
logstash是一款数据收集及同步组件。它就像一个管道,一头连接数据源,一头连接ES。
logstash对mysql表的具体要求
- 要有id,es文档中的_id设置必须来自mysql表中的id字段,它提供了mysql和es文档和数据之间的映射关系;
- mysql表中要有一个标识记录的创建时间或更新时间的字段,logstash可以实现每次请求只获取上次轮询后更新或插入的记录,其实就是给它标识了一个max_time,最大时间,那下一次通过和这个最大时间的比较能够完成一个增量的同步。
logstash 对 mysql增量的配置
es和mysql数据同步增量sql优化可以解决的问题
下图的SQL可以解决 临界点数据没有被扫描到 及 避免老数据被重复扫描 的问题。
ES分词器插件–elasticSearch-analysis-ik
由于es内置的分词器对中文支持不太好,于是我们需要额外引入第三方分词器插件,比如 elasticSearch-analysis-ik。
下图是分词器插件对中文的分词效果: