Apache Doris Binlog Load使用方法及示例

Apache Doris 代碼倉庫地址:apache/incubator-doris 歡迎大家關(guān)注加星


1. 安裝配置 Mysql

  1. 安裝Mysql

    快速使用Docker安裝配置Mysql议惰,具體參照下面的連接

    https://segmentfault.com/a/1190000021523570

    如果是在物理機上安裝可以參考下面的連接:

    在 CentOS 7 中安裝 MySQL 8 的教程詳解

  2. 開啟Mysql binlog

    進入 Docker 容器或者物理機上修改/etc/my.cnf 文件,在 [mysqld] 下面添加以下內(nèi)容,

    log_bin=mysql_bin
    binlog-format=Row
    server-id=1
    
    

    然后重啟Mysql

    systemctl restart mysqld
    
    
  3. 創(chuàng)建 Mysql 表

    create database demo;
    
     CREATE TABLE `test_cdc` (
      `id` int NOT NULL AUTO_INCREMENT,
      `sex` TINYINT(1) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      `address` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
     ) ENGINE=InnoDB
    
    

2. 安裝配置Canal

下載canal-1.1.5: https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz

  1. 解壓Canal到指定目錄:

    tar zxvf canal.deployer-1.1.5.tar.gz -C ./canal
    
    
  2. 在conf文件夾下新建目錄并重命名拒逮,作為instance的根目錄巡雨,目錄名你可以自己命名便于識別即可

    例如我這里的命名是和我的數(shù)據(jù)庫庫名一致:demo

    vi conf/demo/instance.properties
    
    

    下面給出的是一個我的示例配置:

    這里面的參數(shù)說明請參考Canal官方文檔:QuickStart

    #################################################
    ## mysql serverId , v1.0.26+ will autoGen
    canal.instance.mysql.slaveId=12115
    
    # enable gtid use true/false
    canal.instance.gtidon=false
    
    # position info
    canal.instance.master.address=10.220.146.11:3306
    canal.instance.master.journal.name=
    canal.instance.master.position=
    canal.instance.master.timestamp=
    canal.instance.master.gtid=
    
    # rds oss binlog
    canal.instance.rds.accesskey=
    canal.instance.rds.secretkey=
    canal.instance.rds.instanceId=
    
    # table meta tsdb info
    canal.instance.tsdb.enable=true
    #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
    #canal.instance.tsdb.dbUsername=canal
    #canal.instance.tsdb.dbPassword=canal
    
    #canal.instance.standby.address =
    #canal.instance.standby.journal.name =
    #canal.instance.standby.position =
    #canal.instance.standby.timestamp =
    #canal.instance.standby.gtid=
    
    # username/password
    canal.instance.dbUsername=zhangfeng
    canal.instance.dbPassword=zhangfeng800729)(*Q
    canal.instance.connectionCharset = UTF-8
    # enable druid Decrypt database password
    canal.instance.enableDruid=false
    #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
    
    # table regex
    canal.instance.filter.regex=demo\\..*
    # table black regex
    canal.instance.filter.black.regex=
    # table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
    #canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
    # table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
    #canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch
    
    # mq config
    #canal.mq.topic=
    # dynamic topic route by schema or table regex
    #canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
    #canal.mq.partition=0
    # hash partition config
    #canal.mq.partitionsNum=3
    #canal.mq.partitionHash=test.table:id^name,.*\\..*
    #################################################
    
    
  3. 啟動Canal

    sh bin/startup.sh
    
    

注意:canal instance user/passwd

1.1.5 版本,在canal.properties里加上這兩個配置

canal.user = canal canal.passwd = E3619321C1A937C46A0D8BD1DAC39F93B27D4458

默認密碼為canal/canal,canal.passwd的密碼值可以通過select password(“xxx”) 來獲取

  1. 驗證是否啟動成功

    tail -200f logs/demo/demo.log
    
    
    image-20211110145044815

3.開始同步數(shù)據(jù)

3.1 創(chuàng)建Doris目標(biāo)表

用戶需要先在Doris端創(chuàng)建好與Mysql端對應(yīng)的目標(biāo)表

Binlog Load只能支持Unique類型的目標(biāo)表阱扬,且必須激活目標(biāo)表的Batch Delete功能馍刮。

開啟Batch Delete的方法可以參考help alter table中的批量刪除功能。

CREATE TABLE `doris_mysql_binlog_demo` (
  `id` int NOT NULL,
  `sex` TINYINT(1),
  `name` varchar(20),
  `address` varchar(255) 
) ENGINE=OLAP
UNIQUE KEY(`id`,sex)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`sex`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"in_memory" = "false",
"storage_format" = "V2"
);

-- enable batch delete
ALTER TABLE test_2.doris_mysql_binlog_demo ENABLE FEATURE "BATCH_DELETE";

3.1 創(chuàng)建同步作業(yè)

3.1.1 Create Sync Job 語法說明

Name: ‘CREATE SYNC JOB’ Description:

數(shù)據(jù)同步(Sync Job)功能,支持用戶提交一個常駐的數(shù)據(jù)同步作業(yè)亡脸,通過從指定的遠端地址讀取Binlog日志,增量同步用戶在Mysql數(shù)據(jù)庫的對數(shù)據(jù)更新操作的CDC(Change Data Capture)功能垂谢。

目前數(shù)據(jù)同步作業(yè)只支持對接Canal,從Canal Server上獲取解析好的Binlog數(shù)據(jù),導(dǎo)入到Doris內(nèi)鹃栽。

用戶可通過 SHOW SYNC JOB 查看數(shù)據(jù)同步作業(yè)狀態(tài)薇芝。

語法:

CREATE SYNC [db.]job_name
 (
    channel_desc, 
    channel_desc
    ...
 )
binlog_desc

  1. job_name

    同步作業(yè)名稱饮亏,是作業(yè)在當(dāng)前數(shù)據(jù)庫內(nèi)的唯一標(biāo)識荐开,相同job_name的作業(yè)只能有一個在運行。

  2. channel_desc

    作業(yè)下的數(shù)據(jù)通道能扒,用來描述mysql源表到doris目標(biāo)表的映射關(guān)系。

    語法:

     FROM mysql_db.src_tbl INTO des_tbl
     [partitions]
     [columns_mapping]
    
    
    1. mysql_db.src_tbl

      指定mysql端的數(shù)據(jù)庫和源表见秤。

    2. des_tbl

      指定doris端的目標(biāo)表瀑粥,只支持Unique表狞换,且需開啟表的batch delete功能(開啟方法請看help alter table的’批量刪除功能’)路媚。

    3. partitions

      指定導(dǎo)入目的表的哪些 partition 中脏款。如果不指定撤师,則會自動導(dǎo)入到對應(yīng)的 partition 中。

      示例:

       PARTITION(p1, p2, p3)
      
      
    4. column_mapping

      指定mysql源表和doris目標(biāo)表的列之間的映射關(guān)系衰伯。如果不指定库倘,F(xiàn)E會默認源表和目標(biāo)表的列按順序一一對應(yīng)。

      不支持 col_name = expr 的形式表示列彪笼。

      示例:

       假設(shè)目標(biāo)表列為(k1, k2, v1),
      
       改變列k1和k2的順序
       COLUMNS(k2, k1, v1)
      
       忽略源數(shù)據(jù)的第四列
       COLUMNS(k2, k1, v1, dummy_column)
      
      
  3. binlog_desc

    用來描述遠端數(shù)據(jù)源配猫,目前僅支持canal一種幅恋。

    語法:

     FROM BINLOG
     (
         "key1" = "value1", 
         "key2" = "value2"
     )
    
    
    1. Canal 數(shù)據(jù)源對應(yīng)的屬性,以canal.為前綴

      1. canal.server.ip: canal server的地址
      2. canal.server.port: canal server的端口
      3. canal.destination: instance的標(biāo)識
      4. canal.batchSize: 獲取的batch大小的最大值泵肄,默認8192
      5. canal.username: instance的用戶名
      6. canal.password: instance的密碼
      7. canal.debug: 可選捆交,設(shè)置為true時,會將batch和每一行數(shù)據(jù)的詳細信息都打印出來 Examples:
  4. 簡單為 test_dbtest_tbl 創(chuàng)建一個名為 job1 的數(shù)據(jù)同步作業(yè)腐巢,連接本地的Canal服務(wù)器品追,對應(yīng)Mysql源表 mysql_db1.tbl1

     CREATE SYNC `test_db`.`job1`
     (
         FROM `mysql_db1`.`tbl1` INTO `test_tbl `
     )
     FROM BINLOG 
     (
         "type" = "canal",
         "canal.server.ip" = "127.0.0.1",
         "canal.server.port" = "11111",
         "canal.destination" = "example",
         "canal.username" = "",
         "canal.password" = ""
     );
    
    
  5. test_db 的多張表創(chuàng)建一個名為 job1 的數(shù)據(jù)同步作業(yè)冯丙,一一對應(yīng)多張Mysql源表肉瓦,并顯式的指定列映射。

     CREATE SYNC `test_db`.`job1` 
     (
         FROM `mysql_db`.`t1` INTO `test1` COLUMNS(k1, k2, v1) PARTITIONS (p1, p2),
         FROM `mysql_db`.`t2` INTO `test2` COLUMNS(k3, k4, v2) PARTITION p1
     ) 
     FROM BINLOG 
     (
         "type" = "canal", 
         "canal.server.ip" = "xx.xxx.xxx.xx", 
         "canal.server.port" = "12111", 
         "canal.destination" = "example",  
         "canal.username" = "username", 
         "canal.password" = "password"
     );
    
    

3.1.2 開始同步mysql表里數(shù)據(jù)到Doris

注意:

創(chuàng)建同步任務(wù)之前,首先要在fe.conf里配置enable_create_sync_job=true泞莉,這個默認是false不啟用洁墙,否則就不能創(chuàng)建同步任務(wù)

CREATE SYNC test_2.doris_mysql_binlog_demo_job 
(
    FROM demo.test_cdc INTO doris_mysql_binlog_demo
) 
FROM BINLOG 
(
    "type" = "canal", 
    "canal.server.ip" = "10.220.146.10", 
    "canal.server.port" = "11111", 
    "canal.destination" = "demo",  
    "canal.username" = "canal", 
    "canal.password" = "canal"
);

3.1.3 查看同步任務(wù)

SHOW SYNC JOB from test_2;

image-20211110160106602

3.1.4 查看表里的數(shù)據(jù)

select * from doris_mysql_binlog_demo;

image-20211110160331479

3.1.5 刪除數(shù)據(jù)

我們在Mysql 數(shù)據(jù)表里刪除數(shù)據(jù)笤妙,然后看Doris表里的變化

delete from test_cdc where id in (12,13)

我們在去看Doris表里响迂,id是12,13這兩條數(shù)據(jù)已經(jīng)被刪除

image-20211110160710709

3.1.6 多表同步

多表同步只需要像下面這樣寫法就可以了

CREATE SYNC test_2.doris_mysql_binlog_demo_job 
(
    FROM demo.test_cdc INTO doris_mysql_binlog_demo,
    FROM demo.test_cdc_1 INTO doris_mysql_binlog_demo,
    FROM demo.test_cdc_2 INTO doris_mysql_binlog_demo,
    FROM demo.test_cdc_3 INTO doris_mysql_binlog_demo
) 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市殃饿,隨后出現(xiàn)的幾起案子饮寞,更是在濱河造成了極大的恐慌孝扛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幽崩,死亡現(xiàn)場離奇詭異苦始,居然都是意外死亡,警方通過查閱死者的電腦和手機慌申,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門陌选,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹄溉,你說我怎么就攤上這事咨油。” “怎么了柒爵?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵役电,是天一觀的道長。 經(jīng)常有香客問我棉胀,道長法瑟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任唁奢,我火速辦了婚禮霎挟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麻掸。我一直安慰自己酥夭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布论笔。 她就那樣靜靜地躺著采郎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狂魔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天淫痰,我揣著相機與錄音最楷,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛籽孙,可吹牛的內(nèi)容都是我干的烈评。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼犯建,長吁一口氣:“原來是場噩夢啊……” “哼讲冠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起适瓦,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竿开,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玻熙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體否彩,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年嗦随,在試婚紗的時候發(fā)現(xiàn)自己被綠了列荔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡枚尼,死狀恐怖贴浙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情署恍,我是刑警寧澤悬而,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站锭汛,受9級特大地震影響笨奠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唤殴,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一般婆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朵逝,春花似錦蔚袍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渠脉,卻和暖如春宇整,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芋膘。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工鳞青, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霸饲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓臂拓,卻偏偏與公主長得像厚脉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胶惰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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