(1)全量同步
什么是全量同步:将一个mysql的整个表的所有数据都同步到es中
常用插件是logstash-input-jdbc,logstash通过sql语句分区间对数据进行查询,然后输出到es进行实现。
logstash-input-jdbc同步插件原理:
作用:使用 logstash-input-jdbc 插件读取 mysql 的数据
(2)增量同步(canal)
什么是增量同步:业务场景需要实时性较高并对要求****对数据库的压力比较小。
logstash不再适合增量同步,logstash是基于sql来完成的会用一定的延迟性做不到实时性,并且是通过cron表达式来调用。
阿里在做大做强的过程中也遇到过类似的问题,为了达到性能的最优,他们自己通过JAVA代码实现了mysql的数据同步功能,通过解析mysql 的日志进行实现的,并且把这个项目开源——canal 并用它实现的对ES实时同步数据的效果,而且不仅仅可以给ES进行同步。还可以给以下很多第三方软件进行数据同步
原理:
它里面是通过一个server(服务端)和一个client(客户端)来进行实现的。
及server(服务端)负责mysql的日志监听与收集,然后再传给client(客户端)端server(服务端)与client(客户端)使用的netty(网状的 实现聊天功能)进行数据的tcp通信。
同时canal也有专门的可视化监控界面,方便进行查看,同时也有HA(hadoop集群)的实现方式,通过zookeeper来进行实现和控制的。
(个人理解就是类似于一个管道服务端和客户端就是管道的两端,如何利用netty来进行数据的tcp通信)
使用:
想将数据从mysql同步到es通过canal的一个adapter(适配器)就可以直接实现了
Netty 百度百科:https://baike.baidu.com/item/Netty/10061624?fr=aladdin
Netty 详细博客地址:https://www.sohu.com/a/272879207_463994
Netty
是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
canal优点:
(1)canal实现数据的增量同步性能高,有可视化界面可监控
(2)看canal esAdapter的源码可知,canal esAdater中的etl方法对全量同步的功能也已经做了实现,可增量可全量同步了
ES数据同步的实战和详细博客地址:https://blog.csdn.net/RuiKe1400360107/article/details/104270421