canal实现Mysql到Elasticsearch实时增量同步
mysql同步ES的方案,基本分两种,根据字段扫描或者通过解析binlog同步。前者的缺点是无法处理逻辑删除、需要频繁的根据某字段做全表扫描。
兼顾性能和ES的兼容性,我们选择了canal。
框架
增量
全量
支持ES版本
github
缺点
canal
binlog
扫描
>=5.6
elasticsearch-jdbc
jdbc
jdbc
<=2.3.4
https://github.com/jprante/elasticsearch-jdbc
无法处理物理删除
go-mysql-elasticsearch
mysqldump
binlog
<6.0
https://github.com/siddontang/go-mysql-elasticsearch
没有更新了
Logstash-input-jdbc
按照字段扫描
扫描
都可以
需要根据某个字段一直扫描,比如update_time,必须加索引;无法处理物理删除
ES版本选择
结论:6.8.0
原因:es的更新版本非常快,经常一个月就一个小版本。6.8.0是19年5月21发布的。为了性能和稳定性,选择6.x。
既然选择了canal,我们需要升级ES版本。老的业务可以继续使用老的集群。本次的实时更新es使用新的集群。升级到哪个版本呢?
先去调研各个版本的feature
ElasticSearch简介及其发展历史
各个版本升级内容
版本
feature
2.x
5.x
支持lucene6.x,多维浮点字段
Block k-d trees,核心思想是将数字类型编码成定长的字节数组,对定长的字节数组内容进行编码排序,
然后来构建二叉树,然后依次递归构建,目前底层支持8个维度和最多每个维度16个字节,基本满足大部分场景。
在Internal engine级别移除了用于避免同一文档并发更新的竞争锁。
Sliced Scroll
分片数量减少:shrink
reindex
提供了java原生的rest客户端sdk
Text/Keyword 来替换 String
磁盘空间少一半;索引时间少一半;查询性能提升25%
http://www.10tiao.com/html/157/201607/2653160245/1.html
6.x
elasticsearch 6.x 升级调研报告
7.x
Elastic Stack 7.0.0 正式发布
以上是 canal实现Mysql到Elasticsearch实时增量同步 的全部内容, 来源链接: utcz.com/z/513992.html