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