myql 实时同步数据到 ES

需求背景

存储在 Mysql 中的数据量比较大,在 web 端需要进行搜索框搜索,使用的是 es  ,问题是如何保证 mysql 数据与 es 数据的实时一致性

技术选型

canal 与 maxwell 都可以实现 mysql binlog 实时监控,将增量数据同步。最后定为使用  canal 

环境搭建

根据当前公司提供的 es 版本与 mysql 版本在本地搭建虚拟机服务,通过下载 canal-server 与 canal-adapter 构建环境

遇到的问题

在 canal-adapter 始终可以打印消费日志,但是无法同步到 es ,对问题进行了排查

1.配置问题,查询相关资料,对配置进行分析,无果

2.数据库与es 是否正常,数据库是确定正常,问题基本确定在下游写入问题

3.下载源码,对配置分析,是否正确

4.github 官网,issue 查找相关的类似问题,确定为系统 bug ,  更改当前部署版本 ,成功

2021-07-06 17:31:34.199 [pool-2-thread-1] INFO  c.a.o.canal.client.adapter.logger.LoggerAdapterExample - DML: {"data":[{"id":1,"title":"新的title","sub_title":"这是一个title","price":1010.0,"pic":"1"}],

"database":"canal_test","destination":"example","es":1625563894000,"groupId":"g1","isDdl":false,"old":[{"price":10.0}],"pkNames":["id"],"sql":"","table":"product","ts":1625563894199,"type":"UPDATE"} 2021-07-06 17:31:34.201 [pool-2-thread-1] DEBUG c.a.o.canal.client.adapter.es.core.service.ESSyncService - DML: {"data":[{"id":1,"title":"新的title","sub_title":"这是一个title","price":1010.0,"pic":"1"}]
,"database":"canal_test","destination":"example","es":1625563894000,"groupId":"g1","isDdl":false,"old":[{"price":10.0}],"pkNames":["id"],"sql":"","table":"product","ts":1625563894199,"type":"UPDATE"} Affected indexes: product

以上为服务器上消费到的 binlog 日志 ,同时 es 也进行了实时的更新

//初始化后需要全量同步一次

curl http://127.0.0.1:8081/etl/es6/product.yml -X POST

参考文章:https://blog.csdn.net/jcmj123456/article/details/109705562

posted @ 2021-06-25 16:33  byebai95  阅读(540)  评论(0编辑  收藏  举报