Maxwell 介绍

      Maxwell 是由美国 zendesk 开源,用 java 编写的 Mysql 实时抓取软件,其抓取的 原理也是基于 binlog。

官网

https://maxwells-daemon.io/

Maxwell 和 canal 工具对比

Maxwell 没有 canal 那种 server+client 模式,只有一个 server 把数据发送到消息队列 或 redis。如果需要多个实例,通过指定不同配置文件启动多个进程。 Maxwell 有一个亮点功能,就是 canal 只能抓取最新数据,对已存在的历史数据没有办 法处理。而 Maxwell 有一个 bootstrap 功能,可以直接引导出完整的历史数据用于初 始化,非常好用。 Maxwell 不能直接支持 HA,但是它支持断点还原,即错误解决后重启继续上次点儿读 取数据,canal也支持 Maxwell 只支持 json 格式,而 Canal 如果用 Server+client 模式的话,可以自定义格 式。 Maxwell 比 Canal 更加轻量级。

安装使用

前提开启了mysql的binlog在cannel使用的时候已经讲解

前提

创建保存断点续传的数据库,并且创建maxwell用户密码为123456,对于shishimaxwell数据库给maxwell授予权限

mysql -uroot -p123456
CREATE DATABASE shishimaxwell ;
#maxwell是用戶名
GRANT ALL ON shishimaxwell.* TO 'maxwell'@'%' IDENTIFIED BY '123456';
#maxwell是用戶名
GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
tar -zxvf maxwell-1.25.0.tar.gz

修改配置

cp config.properties.example
vi config.properties
producer=kafka
kafka.bootstrap.servers=master:9092,node1:9092,node2:9092
#需要添加
kafka_topic=gmall_db# mysql login info,这里的mysql既是开启binlog的mysql,也是自己创建保存读取位置shishimaxwell的mysql
#数据库host
host=master
#数据库用户
user=maxwell
#数据库密码
password=123456#需要添加 后续bootstrap初始化会用
client_id=maxwell_1
#指定消费位置保存的数据库
schema_database=shishimaxwell

注意:默认还是输出到指定 Kafka 主题的一个 kafka 分区,因为多个分区并行可能会打乱
binlog 的顺序
如果要提高并行度,首先设置 kafka 的分区数>1,然后设置 producer_partition_by 属性
可选值 producer_partition_by=database|table|primary_key|random| column

修改表结构注意

如果是修改了表的结构,修改以后打印的数据为

ADD COLUMN `xinde` varchar(255) NULL COMMENT '修改时间' AFTER `operate_time`" to gmall, new schema id is 2tbeat=0] after applying "ALTER TABLE `gmall`.`comment_info` 

但是如果没有配置schema_host那么修改表结构的数据是不会发送到kafka的,也就是说普通模式只会吧增删改查的数据发送到kafka

Maxwell简介使用-编程知识网

 启动

/home/bigdata/shishishell/maxwell/maxwell-1.25.0/bin/maxwell --config /home/bigdata/shishishell/maxwell/maxwell-1.25.0/config.properties >/dev/null 2>&1 &

查看数据库是否生成了表

Maxwell简介使用-编程知识网

数据产生的格式

{"database": "gmall","table": "comment_info","type": "insert","ts": 1657694285,"xid": 79219,"commit": true,"data": {"id": 1547108081146556427,"user_id": 682,"nick_name": null,"head_img": null,"sku_id": 24,"spu_id": 8,"order_id": 6897,"appraise": "1204","comment_txt": "评论内容:82154639985516955573787189871861313164594735727667","create_time": "2022-06-28 14:38:04","operate_time": null}
}

{"database": "gmall","table": "base_dic","type": "delete","ts": 1657694385,"xid": 111301,"commit": true,"data": {"dic_code": "1101","dic_name": "支付宝","parent_code": "11","create_time": null,"operate_time": null}
}

{"database": "gmall","table": "base_dic","type": "update","ts": 1657694417,"xid": 111341,"commit": true,"data": {"dic_code": "1103","dic_name": "银联1","parent_code": "11","create_time": null,"operate_time": null},"old": {"dic_name": "银联"}
}

bootstap全量

–client_id maxwell_1就是上面配置的东西,它的作用是bootstap只是查询出了数据,而–client_id maxwell_1是指点配置文件里面使用maxwell的一个客户端同步数据

bin/maxwell-bootstrap --user maxwell --password 123456 --host master --database gmall --table user_info --client_id maxwell_1

生成的数据如下

开始的一条数据为空

{"database": "gmall","table": "user_info","type": "bootstrap-start","ts": 1657718813,"data": {}
}
{"database": "gmall","table": "user_info","type": "bootstrap-insert","ts": 1657718505,"data": {"id": 6800,"login_name": "m9ml9e7xq4bx","nick_name": "寒寒","passwd": null,"name": "元寒","phone_num": "13132628314","email": "m9ml9e7xq4bx@yeah.net","head_img": null,"user_level": "1","birthday": "1998-05-28","gender": "F","create_time": "2022-06-29 04:49:45","operate_time": null,"status": null}
}

总结数据特点

日志结构       canal 每一条 SQL 会产生一条日志,如果该条 Sql 影响了多行数据,则已经会通过集 合的方式归集在这条日志中。(即使是一条数据也会是数组结构) maxwell 以影响的数据为单位产生日志,即每影响一条数据就会产生一条日志。如果 想知道这些日志是否是通过某一条 sql 产生的可以通过 xid 进行判断,相同的 xid 的日志来 自同一 sql。 数字类型         当原始数据是数字类型时,maxwell 会尊重原始数据的类型不增加双引,变为字符串。 canal 一律转换为字符串。 带原始数据字段定义 canal 数据中会带入表结构。maxwell 更简洁。

下面文章还行 

Maxwell安装、配置、脚本制作_maxwell-bootstrap_江畔独步的博客-CSDN博客