大数据之实时数据源同步中间件--生产上Canal与Maxwell颠峰对决

Posted 若泽大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之实时数据源同步中间件--生产上Canal与Maxwell颠峰对决相关的知识,希望对你有一定的参考价值。

大数据之实时数据源同步中间件

生产上Canal与Maxwell颠峰对决

建议小伙伴们视频和当前笔记一块对着看,更多内容是在视频里。



Canal  

https://github.com/alibaba/canal

https://github.com/Hackeruncle/syncClient


Maxwell  

https://github.com/zendesk/maxwell

          

mysql ----  中间件 mcp --->KAFKA--->?--->存储HBASE/KUDU/Cassandra  增量的

a.全量  bootstrap

b.增量  


1.对比

Canal(服务端)     Maxwell(服务端+客户端)

语言 Java    Java

活跃度 活跃            活跃

HA 支持            定制  但是支持断点还原功能

数据落地 定制            落地到kafka

分区 支持            支持

bootstrap(引导) 不支持 支持

数据格式 格式自由            json(格式固定) spark json-->DF

文档 较详细 较详细

随机读 支持          支持



个人选择Maxwell

a.服务端+客户端一体,轻量级的

b.支持断点还原功能+bootstrap+json

Can do SELECT * from table (bootstrapping) initial loads of a table.

supports automatic position recover on master promotion

flexible partitioning schemes for Kakfa - by database, table, primary key, or column

Maxwell pulls all this off by acting as a full mysql replica, including a SQL parser for create/alter/drop statements (nope, there was no other way).


2.官网解读  见底部视频获取


3.部署

3.1 MySQL Install

https://github.com/Hackeruncle/MySQL/blob/master/MySQL%205.6.23%20Install.txt

https://ke.qq.com/course/262452?tuin=11cffd50


3.2 修改

$ vi /etc/my.cnf


[mysqld]


binlog_format=row


$ service mysql start


3.3 创建Maxwell的db和用户

mysql> create database maxwell;

Query OK, 1 row affected (0.03 sec)


mysql> GRANT ALL on maxwell.* to 'maxwell'@'%' identified by 'ruozedata';

Query OK, 0 rows affected (0.00 sec)


mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'maxwell'@'%';

Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


mysql> 


3.4解压

[root@hadoop000 software]# tar -xzvf maxwell-1.14.4.tar.gz


3.5测试STDOUT:

bin/maxwell --user='maxwell' \

--password='ruozedata' --host='127.0.0.1' \

--producer=stdout


测试1:insert sql:

mysql> insert into ruozedata(id,name,age,address) values(999,'jepson',18,'www.ruozedata.com');

Query OK, 1 row affected (0.03 sec)


maxwell输出:

{

    "database": "ruozedb",

    "table": "ruozedata",

    "type": "insert",

    "ts": 1525959044,

    "xid": 201,

    "commit": true,

    "data": {

        "id": 999,

        "name": "jepson",

        "age": 18,

        "address": "www.ruozedata.com",

        "createtime": "2018-05-10 13:30:44",

        "creuser": null,

        "updatetime": "2018-05-10 13:30:44",

        "updateuser": null

    }

}

测试1:update sql:

mysql> update ruozedata set age=29 where id=999;

问题:  ROW,你觉得binlog更新几个字段?

maxwell输出:

{

    "database": "ruozedb",

    "table": "ruozedata",

    "type": "update",

    "ts": 1525959208,

    "xid": 255,

    "commit": true,

    "data": {

        "id": 999,

        "name": "jepson",

        "age": 29,

        "address": "www.ruozedata.com",

        "createtime": "2018-05-10 13:30:44",

        "creuser": null,

        "updatetime": "2018-05-10 13:33:28",

        "updateuser": null

    },

    "old": {

        "age": 18,

        "updatetime": "2018-05-10 13:30:44"

    }

}

     

4.其他注意点和新特性

4.1 kafka_version 版本

Using kafka version: 0.11.0.1  0.10

jar:

[root@hadoop000 kafka-clients]# ll

total 4000

-rw-r--r--. 1 ruoze games  746207 May  8 06:34 kafka-clients-0.10.0.1.jar

-rw-r--r--. 1 ruoze games  951041 May  8 06:35 kafka-clients-0.10.2.1.jar

-rw-r--r--. 1 ruoze games 1419544 May  8 06:35 kafka-clients-0.11.0.1.jar

-rw-r--r--. 1 ruoze games  324016 May  8 06:34 kafka-clients-0.8.2.2.jar

-rw-r--r--. 1 ruoze games  641408 May  8 06:34 kafka-clients-0.9.0.1.jar

[root@hadoop000 kafka-clients]# 


4.2 更多的详见视频



还请小伙伴们多一份关注,

单击[免费视频-Maxwell]菜单,领取视频

以上是关于大数据之实时数据源同步中间件--生产上Canal与Maxwell颠峰对决的主要内容,如果未能解决你的问题,请参考以下文章

基于Canal和Kafka实现MySQL的Binlog近实时同步

系统重构数据同步利器之Canal实战篇

阿里Canal框架(数据同步中间件)初步实践

生产环境实践:Cana实现MySQL到ES实时同步

Canal实现MySQL数据实时同步

数据实时同步利器-Canal