本文主要是介绍47.功能 1:数据采集实现(Maxwell),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
3.1 Maxwell 介绍
Maxwell 是由美国 zendesk 开源,用 java 编写的 Mysql 实时抓取软件, 其抓取的
原理也是基于 binlog。
3.2 Maxwell 和 canal 工具对比
➢
Maxwell 没有 canal 那种 server+client 模式,只有一个 server 把数据发送到消息队列
或 redis。如果需要多个实例,通过指定不同配置文件启动多个进程。
➢
Maxwell 有一个亮点功能,就是 canal 只能抓取最新数据,对已存在的历史数据没有办
法处理。而 Maxwell 有一个 bootstrap 功能,可以直接引导出完整的历史数据用于初
始化,非常好用。
➢
Maxwell 不能直接支持 HA,但是它支持断点还原,即错误解决后重启继续上次点儿读
取数据。
➢
Maxwell 只支持 json 格式,而 Canal 如果用 Server+client 模式的话,可以自定义格
式。
➢
Maxwell 比 Canal 更加轻量级。
3.3 安装 Maxwell
➢
将 2.资料\02-工具下的 maxwell-1.25.0.tar.gz 上传到/opt/software 目录下
➢
解压 maxwell-1.25.0.tar.gz 到/opt/module 目录
[atguigu@hadoop202 module]$ tar -zxvf /opt/software/maxwell-1.25.0.tar.gz -C /opt/module/
3.4 使用前准备工作
➢ 在数据库中建立一个 maxwell 库用于存储 Maxwell 的元数据
[atguigu@hadoop202 module]$ mysql -uroot -p123456
mysql> CREATE DATABASE maxwell ;
➢ 分配一个账号可以操作该数据库
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY '123456';
➢ 分配这个账号可以监控其他数据库的权限
mysql> GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell@'%';
3.5 使用 Maxwell 监控抓取 MySQL 数据
➢ 拷贝配置文件
[atguigu@hadoop202 maxwell-1.25.0]$ cp config.properties.example config.properties
➢ 修改配置文件
注意:默认还是输出到指定 Kafka 主题的一个 kafka 分区,因为多个分区并行可能会打乱
binlog 的顺序
如果要提高并行度,首先设置 kafka 的分区数>1,然后设置 producer_partition_by 属性
可选值 producer_partition_by=database|table|primary_key|random| column
➢ 在/home/atguigu/bin 目录下编写 maxwell.sh 启动脚本
[atguigu@hadoop202 maxwell-1.25.0]$ vim /home/atguigu/bin/maxwell.sh
/opt/module/maxwell-1.25.0/bin/maxwell --config /opt/module/maxwell-1.25.0/config.properties >/dev/null 2>&1 &
➢ 授予执行权限
[atguigu@hadoop202 maxwell-1.25.0]$ sudo chmod +x /home/atguigu/bin/maxwell.sh
➢ 运行启动程序
[atguigu@hadoop202 maxwell-1.25.0]$ maxwell.sh
➢ 启动 Kafka 消费客户端,观察结果
[atguigu@hadoop202 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server
hadoop202:9092 --topic gmall2020_db_m
➢ 执行/opt/module/rt_dblog 下的 jar 生成模拟数据
3.6 Maxwell 版本的 ODS 层处理
3.6.1 执行不同操作,Maxwell 和 canal 数据格式对比
➢ 执行 insert 测试语句
INSERT INTO z_user_info VALUES(30,'zhang3','13810001010'),(31,'li4','1389999999');
➢ 执行 update 操作
UPDATE z_user_info SET user_name='wang55' WHERE id IN(30,31)
➢ delete 操作
DELETE FROM z_user_info WHERE id IN(30,31)
3.6.2 总结数据特点
➢ 日志结构
canal 每一条 SQL 会产生一条日志,如果该条 Sql 影响了多行数据,则已经会通过集
合的方式归集在这条日志中。(即使是一条数据也会是数组结构)
maxwell 以影响的数据为单位产生日志,即每影响一条数据就会产生一条日志。如果
想知道这些日志是否是通过某一条 sql 产生的可以通过 xid 进行判断,相同的 xid 的日志来
自同一 sql。
➢ 数字类型
当原始数据是数字类型时,maxwell 会尊重原始数据的类型不增加双引,变为字符串。
canal 一律转换为字符串。
➢ 带原始数据字段定义
canal 数据中会带入表结构。maxwell 更简洁。
3.6.3 SparkStreaming 对 Topic 分流业务代码
3.6.4 测试
➢
启动 Redis
➢
启动 Maxwell
➢
运行 BaseDBMaxwellApp 程序
➢
查看 kafka 下的主题
[atguigu@hadoop202 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server
hadoop202:9092 --topic ods_order_info
➢ 运行/opt/module/rt_dblog 模拟生成日志
这篇关于47.功能 1:数据采集实现(Maxwell)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!