需求背景
存儲在 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