Canal——寫入到ES中數據錯亂


 

問題描述

  使用canal-adapter寫入elasticSearch數據時,數據是寫入了elasticSearch了,但出現了mysql表中的數據和elasticSearch中索引中的數據錯亂的問題,即把A列的數據放到了B列中的。

研究了半天,發現是因為我在測試過程中,換過另外1個數據庫,這2個庫中的列不一致導致的。

因為canal會通過tsdb維護了一個當前數據庫內表結構,具體配置如下:

我這里(tsdb使用的是本地的h2數據庫)。

我有2個數據庫,首先在第1個庫測試驗證,是正常的,然后換成在第2個庫測試驗證,就出問題了,

因為第1個庫時已經緩存了表結構信息,第2個庫還是拿的第1個庫的表結構進行處理的。

理解canal tsdb的功能需要先看懂官方對tsdb的介紹和實現
https://github.com/alibaba/canal/wiki/TableMetaTSDB

 

 

解決方案

知道原因了就好解決了,既然是用H2存儲表結構的,那刪除它,然后重啟服務就好了,因為會重新加載最新的表結構

cd canal/conf/db1
rm -rf h2.mv.db

 

 

后續優化

在使用HA功能的同時,如果開啟tsdb的話,一定要將tsdb設置為集中式的,也就是不要使用本地的h2了,而是使用集中化的mysql數據庫,保證兩台canal連接的是同一個數據庫。

這樣的話才能夠滿足在進行DDL和HA切換的時候不會出現異常。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM