使用canal实现MySQL 8 增量同步数据到 ElasticSearch 7.15.2中 linux
文章目錄
- 一、清空控制臺(tái)
- 1. 清空控制臺(tái)
- 2. 修改數(shù)據(jù)
- 3. 監(jiān)控?cái)?shù)據(jù)
- 4. 數(shù)據(jù)變化
- 5. 索引查詢
- 6. 預(yù)期性能評(píng)估
- 7. 增量同步分析
- 二、驗(yàn)證方案
- 2.1. 把shop索引刪除
- 2.2. 重建shop索引
- 2.3. 修改id=取得數(shù)據(jù)
- 2.4. 查看shop索引數(shù)據(jù)
- 2.4. 修改分類(lèi)表數(shù)據(jù)
- 2.6. 監(jiān)控
- 2.7. 查看shop索引數(shù)據(jù)
- 2.8. 總結(jié)
- 2.9. 解決方案
一、清空控制臺(tái)
1. 清空控制臺(tái)
清空canal.adapter控制臺(tái)
cd /app/canal/canal.adapter tail -f logs/adapter/adapter.log2. 修改數(shù)據(jù)
修改mysql的id=1的name的數(shù)據(jù),將陜西22面館(北京亦莊
改為gblfy陜西面館(北京亦莊)
3. 監(jiān)控?cái)?shù)據(jù)
監(jiān)控canal.adapter控制臺(tái)
4. 數(shù)據(jù)變化
{"data": [{"id": 1,"created_at": 1637308432000,"updated_at": 1640159632000,"name": "gblfy陜西面館(北京亦莊)","remark_score": 4.9,"price_per_man": 156,"latitude": 31.195341,"longitude": 120.915855,"category_id": 1,"tags": "新開(kāi)業(yè) 人氣爆棚","start_time": "10:00","end_time": "22:00","address": "船廠路36號(hào)","seller_id": 1,"icon_url": "/static/image/shopcover/xchg.jpg"}],"database": "dianpingdb","destination": "example","es": 1637644424000,"groupId": "g1","isDdl": false,"old": [{"name": "陜西22面館(北京亦莊)"}],"pkNames": ["id"],"sql": "","table": "shop","ts": 1637644425043,"type": "UPDATE" } Affected indexes: shop從上面可以看出,canal.adapter監(jiān)控到了我的數(shù)據(jù)變化,并進(jìn)行增量的數(shù)據(jù)的同步到ES7中。
5. 索引查詢
# 查詢shop索引 GET /shop/_search {"query": {"match": {"name": "gblfy"}} }6. 預(yù)期性能評(píng)估
我們要求最大性能(理論上):當(dāng)用戶修改id=1 中name的數(shù)據(jù)的值,其他索引的內(nèi)容都不應(yīng)該發(fā)生變化,僅僅對(duì)我對(duì)修改的id=1 中name的數(shù)據(jù)的值發(fā)生變化。
我們?cè)谂渲胏anal.adapter的shop.xml中的sql時(shí),是一個(gè)全量的sql。
7. 增量同步分析
sql中沒(méi)有指定具體要求的數(shù)據(jù)的id,那canal.adapter怎么監(jiān)控到我數(shù)據(jù)發(fā)生變化后,只同步我修改ID=1的這條數(shù)據(jù)呢?
-
二種解釋:
-
第一種:
canal.adapter內(nèi)部做了一個(gè)這樣的機(jī)制;
當(dāng)我修改ID=1的數(shù)據(jù)時(shí),canal.adapter通過(guò)全量sql就可以把id=1的數(shù)據(jù)篩選出來(lái),然后進(jìn)行增量同步到es7的索引中。 -
第二種:
canal.adapter 內(nèi)部武這樣監(jiān)控的機(jī)制,只要數(shù)據(jù)發(fā)生變化,就執(zhí)行全量sql,做全量同步,只不過(guò)已經(jīng)存在而索引讓es7做更新操作而已。
二、驗(yàn)證方案
2.1. 把shop索引刪除
# 刪除shop索引 DELETE /shop2.2. 重建shop索引
PUT /shop {"settings": {"number_of_shards": 1,"number_of_replicas": 1}, "mappings": {"properties": {"id":{"type": "integer"},"name":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"tags":{"type": "text","analyzer": "whitespace","fielddata": true},"location":{"type": "geo_point"},"remark_score":{"type": "double"},"price_per_man":{"type": "integer"},"category_id":{"type": "integer"},"category_name":{"type": "keyword"},"seller_id":{"type": "integer"},"seller_remark_score":{"type": "double"},"seller_disabled_flag":{"type": "integer"}}} }2.3. 修改id=取得數(shù)據(jù)
把id=1的name值由gblfy陜西面館(北京亦莊)改成com.gblfy陜西面館(北京亦莊)
2.4. 查看shop索引數(shù)據(jù)
# 查詢shop索引 GET /shop/_search
從上面查詢結(jié)果來(lái)看符合預(yù)期,對(duì)吧!
2.4. 修改分類(lèi)表數(shù)據(jù)
把category表中id=1中的name值美食5修改成美食8
說(shuō)明:
2.6. 監(jiān)控
從截圖中可以看出也監(jiān)控到了,對(duì)吧,別急!
2.7. 查看shop索引數(shù)據(jù)
從上面截圖中可以看到,數(shù)據(jù)canal.adapter 雖然監(jiān)控到了,但是,es7中的數(shù)據(jù)沒(méi)更新。
2.8. 總結(jié)
官網(wǎng)自帶的canal.adapter 組件
canal.adapter 對(duì)單表增量同步,是支持的
一對(duì)一形式:mysql的一張表對(duì)應(yīng)es的一個(gè)index
canal.adapter 對(duì)聚合sql(也就是多表查詢),不支持
2.9. 解決方案
我們可以通過(guò)代碼方式,可以自定義我們對(duì)于canal.adapter 的行為的能力。使用canal.deployer建立和mysql數(shù)據(jù)binlog之間的能力,摒棄掉canal.adapter,在點(diǎn)評(píng)搜索的應(yīng)用當(dāng)中,直接接入canal.deployer,以canal.deployer消費(fèi)端的身份去消費(fèi)我們對(duì)應(yīng)的消息。
總結(jié)
以上是生活随笔為你收集整理的使用canal实现MySQL 8 增量同步数据到 ElasticSearch 7.15.2中 linux的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决jodconverter 2.2.1
- 下一篇: linux cmake编译源码,linu