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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM