Maxwell的使用初探

Maxwell的使用初探

1.简介

说到大数据的实时数据源同步中间件就不得不说Maxwell,同时还有Canal,Canal是阿里的中间件组件,Maxwell是国外开源的组件.

Canal地址:https://github.com/alibaba/canal

Maxwell地址:https://github.com/zendesk/maxwell

Maxwell官网地址:http://maxwells-daemon.io/

对比:

Canal(服务端)Maxwell(服务端+客户端)
语言JavaJava
活跃度活跃活跃
HA支持定制,但是支持断点还原
数据落地定制落地到kafka
分区支持支持
bootstrap(引导)不支持支持
数据格式格式自由json(格式固定)
文档较详细较详细
随机读支持支持

Maxwell相较于Canal的优势:

1.服务端和客户端一体,无需分开部署,轻量级的

2.支持断点还原功能+bootstrap引导+json格式的数据

2.部署和使用

1.Maxwell使用需要有mysql,mysql安装过程不多赘述,我之前的博客有

#下载Maxwell压缩包
wget https://github.com/zendesk/maxwell/releases/download/v1.22.1/maxwell-1.22.1.tar.gz
#解压文件
tar -xzvf maxwell-1.22.1.tar.gz -C /opt/scripts

2.修改mysql配置文件my.cnf,修改完之后重启mysql

vim /etc/my.cnf

server_id = 1
log-bin = master
#修改mysql的binlog日志模式为ROW模式
binlog_format = ROW

3.在mysql中创建Maxwell的database和用户

create database maxwell;
grant all on maxwell.* to 'maxwell'@'%' identified by '123456';
grant select,replication client,replication slave on *.* to 'maxwell'@'%';

--然后刷新权限
flush privileges;

4.测试STDOUT producer

producer类似于kafka的producer

#stdout一般用作测试
bin/maxwell --user='maxwell' --password='123456' --host='127.0.0.1' --producer=stdout

然后我们往mysql里面的某张表插入跟修改一条数据

insert into user(id,name,age) values(11,'Tom',22);

update user set age = 25 where id = 11;

在我们producer的监控界面可以看见我们插入跟修改的数据的日志

{"database":"test","table":"user","type":"insert","ts":1559116478,"xid":7695,"commit":true,"data":{"id":11,"name":"Tom","age":22}}

{"database":"test","table":"user","type":"update","ts":1559116761,"xid":15794,"commit":true,"data":{"id":11,"name":"Tom","age":25},"old":{"age":22}}

5.测试kafka的producer

#先创建一个我们maxwell传输的topic
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap node1:9092,node2:9092,node3:9092 --topic maxwells
#启动kafka的consumer来消费maxwell中的消息
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic maxwells

#启动maxwell的producer
bin/maxwell --user='maxwell' --password='123456' --host='127.0.0.1' --producer=kafka --kafka.bootstrap.servers=node1:9092,node2:9092,node3:9092 --kafka_topic=maxwells

3.使用注意点

1.kafka版本

Maxwell启动默认使用的kafka版本是0.11

官网有maxwell具体参数信息地址:http://maxwells-daemon.io/config/

kafka_versionKAFKA_VERSIONrun maxwell with specified kafka producer version. Not available in config.properties.0.11.0.1
注意一点的是,他说在config.properties配置无效,所以要命令行运行的时候指定

同时如果在maxwell/lib/kafka_client目录下没有我们本地的kafka版本的client包,我们需要手动将本地kafka版本的jar包添加到lib目录下

2.指定库表大小写问题

特定场合的大小写问题,例如我们需要filter的表的表名是大写的,但是我们数据库的表的表名是小写的,并不会成功识别到,所以filter的时候表名尽量都小写

3.misc,pos位置问题

场景:mysql的pos位置到了10000,但是maxwell想从pos位置990开始取数据

init_positionFILE:POSITION[:HEARTBEAT]ignore the information in maxwell.positions and start at the given binlog position. Not available in config.properties.
同样也是在config.properties指定无效

4.bootstrap引导操作

bootstrap引导类似于select *from table的批量抽取,也就是数据初始化

针对数据初始化的问题,Maxwell 提供了一个命令工具 maxwell-bootstrap 帮助我们完成数据初始化,maxwell-bootstrap 是基于 SELECT * FROM table 的方式进行全量数据初始化,不会产生多余的binlog!

参数说明
–log_level LOG_LEVEL日志级别(DEBUG, INFO, WARN or ERROR)
–user USERmysql 用户名
–password PASSWORDmysql 密码
–host HOSTmysql 地址
–port PORTmysql 端口
–database DATABASE要bootstrap的表所在的数据库
–table TABLE要引导的表
–where WHERE_CLAUSE设置过滤条件
–client_id CLIENT_ID指定执行引导操作的Maxwell实例

如果进行过maxwell抽取,需要清空binlog,删除 maxwell 库中的表,然后启动Kafka、Maxwell和Kafka消费者,再启动bootstrap命令

bin/maxwell-bootstrap --user maxwell --password 123456 --host 127.0.0.1  --database test --table test --client_id maxwell

注意:--bootstrapper=sync 时,在处理bootstrap时,会阻塞正常的binlog解析;--bootstrapper=async 时,不会阻塞。

也可以执行下面的SQL,在 maxwell.bootstrap 表中插入记录,手动触发

insert into maxwell.bootstrap (database_name, table_name) values ('test', 'test');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值