1.生产主流的大数据实时数据源同步中间件:
主要有Canal和Maxwell,它们都是数据同步工具。
1.1中间件的作用:
Mysql 》Maxwell|Canal》Kafka===》??==》存储端(数仓)HBase|Kudu|Cassandra|Hive
将数据增删改操作实时的同步到另一端。
1.2Canal:
- 由阿里推出的开源的大数据实时数据源同步中间件
- 源码地址:https://github.com/alibaba/canal
客户端:syncClient
1.3Maxwell:
- 老外写的开源的的大数据实时数据源同步中间件
- 源码地址:https://github.com/zendesk/maxwell
2.对比选择
-
主要区别:
1、虽然Maxwell不能直接支持HA,但是它支持断点还原,即错误解决后重启继续上次点儿读取数据。
2、Canal是服务端,数据过来了并不能直接写出去,需要一个客户端:syncClient去获取数据
Maxwell即是服务端也是客户端。
3、Maxwell支持Bootstrap,即刷全量的数据,而Canal不支持。
4、Maxwell只支持Json,而Canel数据格式自由 -
个人选择Maxwell:
a、服务端和客户端是一体的
b、Maxwell是轻量级的,出错风险低,Canal经常出错
c、虽然部署的是单台,但是具有断点还原能力,出错好解决
d、Maxwell代码质量非常好,且社区更加的活跃
3.Maxwell官网解读
官网地址,它设计的初衷是实时采集Mysql数据到Kafka,它是Kafka的Producer
- 支持全表load数据
- 支持自动断点还原
- 支持按照列将数据发送到Kafka不同分区
MaxWell将mysql的insert操作转成的json
mysql> insert into `test`.`maxwell` set id = 1, daemon = 'Stanislaw Lem';
maxwell: {
"database": "test",
"table": "maxwell",
"type": "insert",
"ts": 1449786310,
"xid": 940752,
"commit": true,
"data": { "id":1, "daemon": "Stanislaw Lem" }
}
MaxWell将mysql的update操作转成的json
mysql> update test.maxwell set daemon = 'firebus! firebus!' where id = 1;
maxwell: {
"database": "test",
"table": "maxwell",
"type": "update",
"ts": 1449786341,
"xid": 940786,
"commit": true,
"data": {"id":1, "daemon": "Firebus! Firebus!"},
"old": {"daemon": "Stanislaw Lem"}
}
4.Maxwell部署
4.1下载
我这里选择的是1.14.4版本,生产上尽量用较新的版本,此版本坑有点儿多。

4.2安装Mysql
省略,可参照我之前的Mysql的tar安装
4.3安装Maxwell
#解压
[hadoop@hadoop001 soft]$ cd ~/soft/
[hadoop@hadoop001 soft]$ tar -zxvf maxwell-1.14.4.tar.gz -C ~/app/
#修改Mysql的配置,将Binlog数据格式改为ROW,Binlog数据格式有三种(ROW、MIXED、Statement)
[hadoop@hadoop001 soft]$ exit
[root@hadoop001 ~]# service mysql stop
[mysqladmin@hadoop001 ~]$ service mysql status
[root@hadoop001 ~]# vim /etc/my.cnf
binlog_format = ROW
[root@hadoop001 ~]# su - mysqladmin
[mysqladmin@hadoop001 ~]$ service mysql start
#检测配置是否修改成功
[mysqladmin@hadoop001 ~]$ mysql -uroot -p
mysql> show variables like '%binlog%';
#创建Maxwell的数据库和用户
mysql> create database maxwell;
mysql> CREATE USER 'maxwell'@'%' IDENTIFIED BY 'XXXXXX';
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY '123456';
mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';
mysql> flush privileges;
5.快速启动Maxwel
Maxwell支持将binlog数据采集发送到stdout、Kafka、Redist、RabbitMQ、Kinesis、Google Cloud Pub/Sub等
5.1stdout producer方式启动Maxwell
以命令行生产生产者方式启动Maxwell,然后mysql插入修改以及删除数据,看控制台有什么反应
*启动
[mysqladmin@hadoop001 ~]$ exit
[root@hadoop001 ~]# su - hadoop
[hadoop@hadoop001 ~]$ cd ~/app/maxwell-1.14.4/
[hadoop@hadoop001 maxwell-1.14.4]$ bin/maxwell --user='maxwell' --password='123456' --host='127.0.0.1' --producer=stdout
插入操作:控制台返回的结果,binglog会记录一整份的数据:
{"database":"test","table":"wsktest","type":"insert","ts":1559224176,"xid":367,"commit":true,"data":{"name":"maxwell1","age":18,"salary":1000}}
更新操作:控制台返回结果,会记录新的一整份数据,同时会显示旧的数据:
{"database":"test","table":"wsktest","type":"update","ts":1559224272,"xid":400,"commit":true,"data":{"name":"maxwell1","age":180,"salary":1000},"old":{"age":18}}
删除操作:控制台返回结果,会记录新的一整份数据:
{"database":"test","table":"wsktest","type":"insert","ts":1559229783,"xid":1406,"commit":true,"data":{"name":"maxwell1","age":18,"salary":1000}}
5.2(重点)Kafka producer方式启动Maxwell
将Mysql的操作binlog数据发送Kafka。
- 启动
[hadoop@hadoop001 maxwell-1.14.4]$ bin/maxwell --user='maxwell' --password='123456' --host='127.0.0.1' \
--producer=kafka --kafka.bootstrap.servers=localhost:9092 --kafka_topic=maxwell
6.Configuration
http://maxwells-daemon.io/config/ ,这里有所有的Maxwell的相关配置。
要注意kafka_version的支持版本,故我们部署的kafka是有版本要求的,且此参数在命令行修改才是有效的。
- 默认的配置是在config.properties.example,修改去mv去掉.example
- 踩坑,有些配置在config.properties修改是无效,必须是命令行
- 若下载的maxwell的libs下没有想要的Kafka版本的Client,必须将得拷一份
- filtering可过滤某些表和库,不进行实时同步
- 在参数设置时注意表明、库名大小写,默认mysql区分数据库名和表名大小写,不区分变量和列名大小写
- monitoring,对Maxwell进行一些监控
- misc,可以从指定位置同步数据,若不开启,默认最新的pos位置。如当mysql的position位置在10000,我想从990开始同步数据,
7.maxwell-bootstrap
用于将表全量load的工具,非常的方便
8.changelog
版本的realease notes,没事多看看。

3434

被折叠的 条评论
为什么被折叠?



