Canal同步es

CanalAdapter同步ES7

預(yù)準(zhǔn)備

  1. Mysql5.7
  2. ElasticSearch7.12.1集群或單擊(7.x +)
  3. 一個(gè)數(shù)據(jù)庫(kù)和一個(gè)表結(jié)構(gòu)

1.下載

下載Canal1.1.5,支持es7

canal.deployer-1.1.5.tar.gz對(duì)應(yīng)的是canal的server端珍语,負(fù)責(zé)訂閱并解析Mysql-Binlog
canal.adapter-1.1.5.tar.gz對(duì)應(yīng)的是適配器蝶缀,負(fù)責(zé)將server的binlog轉(zhuǎn)換并發(fā)送給對(duì)應(yīng)的應(yīng)用
canal.admin-1.1.5.tar.gz一個(gè)可視化webui可以不安裝
額外需要下載v1.1.5-alpha-2快照版本的canal.adapter-1.1.5.tar.gz(release1.1.5版本的jar包有bug)


分別解壓縮后敛滋,將v1.1.5-alpha-2解壓縮文件夾下plugin文件夾中的 client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar 替換掉release版本的plugin文件的 client-adapter.es7x-1.1.5-jar-with-dependencies.jar

2. 開(kāi)啟Mysql-Binlog

進(jìn)入mysql終端執(zhí)行

show variables like 'log_bin';

如果是ON就代表已經(jīng)開(kāi)啟蔬崩。
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+

3. 修改配置

  1. 先修改canal.deployer的配置
    參考官方中文文檔: https://github.com/alibaba/canal/wiki/QuickStart
  2. 修改canal.adapter配置 conf/application.yml
    更多請(qǐng)參考官方中文文檔:https://github.com/alibaba/canal/tree/master/client-adapter
server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: 0
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
   # 省略.... 默認(rèn)即可
  srcDataSources:   # 注意打開(kāi)注釋?zhuān)缓笠蜕厦鎸?duì)齊否則會(huì)報(bào)錯(cuò)(但是卻又不告訴你是格式問(wèn)題..)
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true
      username: root
      password: 123456
  canalAdapters:
  - instance: example # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: es7 # 這里要改為es7 他會(huì)去es7下去找配置
        key: exampleKey #這里是全量導(dǎo)入時(shí)的taskid
        hosts: es1:9201,es2:9202,es3:9203 # 我這里是集群,如果單機(jī)寫(xiě)一個(gè)就行ip:port
        properties:
          mode: rest # restful 模式
          cluster.name: es-cluster # 集群名字 GET _cat/health?v 可以看到對(duì)應(yīng)的名字
  1. 修改es7下模板文件 conf/es7/mytest_user.yml
dataSourceKey: defaultDS #和上面canal.conf.srcDataSources.defaultDS要一樣
outerAdapterKey: exampleKey #和上面canal.conf.canalAdapters.instance.groups.outerAdapters.key要一樣
destination: example #和上面canal.conf.canalAdapters.instance要一樣
groupId: g1 #和上面canal.conf.canalAdapters.instance.groups.groupId要一樣
esMapping:
  _index: test #索引名稱(chēng)
  _id: _id #documentid
  _type: _doc # type
#  upsert: true
#  pk: id
  sql: "select a.id as _id, a.name_cn, a.name_en, a.email
        from user a"  # 查詢(xún)的sql返回的結(jié)構(gòu)要使用as別名和es的filed對(duì)應(yīng)
#  objFields:
#    _labels: array:;
  commitBatch: 3000 #批量提交數(shù)量

4. 創(chuàng)建對(duì)應(yīng)的索引

PUT test
{
  "settings":{
        "number_of_shards":1,
        "number_of_replicas":2
    },
    "mappings":{
        "properties":{
            "name_cn" : {
          "type" : "keyword"
        },
        "name_en" : {
          "type" : "keyword"
        },
        "email" : {
          "type" : "keyword"
        }
      }
        }
    }

5. 啟動(dòng)

均在對(duì)應(yīng)目錄下 /bin/startup.sh

  1. 先啟動(dòng)deployer,查看/logs/canal/canal.log 無(wú)異常后再查看/logs/example/example.log均無(wú)異常則啟動(dòng)成功
  2. 啟動(dòng)adapter,查看/logs/adapter/adapter.log 無(wú)異常則啟動(dòng)成功

6.首次全量導(dǎo)入

curl http://localhost:8081/etl/es7/exampleKey/mytest_user.yml -X POST

 //執(zhí)行完對(duì)應(yīng)在/logs/adapter/adapter.log會(huì)有批量導(dǎo)入成功的日志
 start etl to import data to index: test
 數(shù)據(jù)全量導(dǎo)入完成, 一共導(dǎo)入 1585 條數(shù)據(jù), 耗時(shí): 643
 /**
     * ETL curl http://127.0.0.1:8081/etl/rdb/oracle1/mytest_user.yml -X POST
     *
     * @param type 類(lèi)型 hbase, es
     * @param key adapter key
     * @param task 任務(wù)名對(duì)應(yīng)配置文件名 mytest_user.yml
     * @param params etl where條件參數(shù), 為空全部導(dǎo)入,匹配etlCondition中的參數(shù),使用;分號(hào)多個(gè)值
     */
    @PostMapping("/etl/{type}/{key}/{task}")
    public EtlResult etl(@PathVariable String type, @PathVariable String key, @PathVariable String task,
                         @RequestParam(name = "params", required = false) String params) 

7.增量添加更新刪除自動(dòng)同步

  1. 如果以上操作在程序運(yùn)行期間無(wú)任何異常則自動(dòng)就開(kāi)啟了同步添吗,可以手動(dòng)添加更新刪除一個(gè)記錄試試。
  2. 如果出現(xiàn)提示表異常份名,可能是因?yàn)閹?kù)太多某些庫(kù)有問(wèn)題

修改/deployer/conf/example/instance.properties的匹配策略

#只同步test庫(kù)的全部表數(shù)據(jù)
canal.instance.filter.regex=test\\..*

如果解決不了則建議去看官方的issue碟联,https://github.com/alibaba/canal/issues妓美。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鲤孵,隨后出現(xiàn)的幾起案子壶栋,更是在濱河造成了極大的恐慌,老刑警劉巖普监,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贵试,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凯正,警方通過(guò)查閱死者的電腦和手機(jī)毙玻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)廊散,“玉大人桑滩,你說(shuō)我怎么就攤上這事≡识茫” “怎么了运准?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)擂找。 經(jīng)常有香客問(wèn)我戳吝,道長(zhǎng),這世上最難降的妖魔是什么贯涎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮慢洋,結(jié)果婚禮上塘雳,老公的妹妹穿的比我還像新娘。我一直安慰自己普筹,他們只是感情好败明,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著太防,像睡著了一般妻顶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜒车,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天讳嘱,我揣著相機(jī)與錄音,去河邊找鬼酿愧。 笑死沥潭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嬉挡。 我是一名探鬼主播钝鸽,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汇恤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拔恰?” 一聲冷哼從身側(cè)響起因谎,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颜懊,沒(méi)想到半個(gè)月后蓝角,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饭冬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年使鹅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昌抠。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡患朱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炊苫,到底是詐尸還是另有隱情裁厅,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布侨艾,位于F島的核電站执虹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唠梨。R本人自食惡果不足惜袋励,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望当叭。 院中可真熱鬧茬故,春花似錦、人聲如沸蚁鳖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)醉箕。三九已至钾腺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讥裤,已是汗流浹背放棒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坞琴,地道東北人哨查。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像剧辐,于是被迫代替她去往敵國(guó)和親寒亥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邮府,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容