Maxwell 介绍、安装、部署、运行(MYSQL -> Maxwell -> kafka)

Maxwell 安装、部署、运行(MYSQL -> Maxwell -> kafka)

一、Maxwell 概述

Maxwell 用 Java 编写的 MySQL 实时抓取软件。 实时读取MySQL 二进制日志 Binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka等消费中心。

二、Maxwell 工作原理

1、MySQL 主从复制过程

-> Master 主库将改变记录,写到二进制日志(binary log)中
-> Slave 从库向 mysql master 发送 dump 协议,将 master 主库的 binary log events 拷贝到它的日志(relay log);
-> Slave 从库读取日志中的事件,将改变的数据同步到自己的数据库。

Maxwell 的工作原理就是把自己伪装成 MySQL 的一个 slave,然后以 slave的身份假装从 MySQL(master)复制数据。

2、Mysql的binlog 的开启

找到 MySQL 配置文件的位置
Linux: /etc/my.cnf
如果/etc 目录下没有,可以通过 locate my.cnf 查找位置
添加
erver_id=1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=learn_maxwell
binlog-do-db=learn_kafka

重启Mysql ,检查日志是否启动

systemctl restart mysqld
mysql> show variables like '%binlog%';
binlog_format | ROW

MySQL 生成的 binlog 文件初始大小一定是 154 字节

三、安装Maxwell

前提:使用jdk8的使用1.30之前版本 ,此处使用的是【maxwell-1.29.2.tar.gz】 
官网下载好后,进行解压

官网地址
相关文档地址

1、初始化 Maxwell 元数据库

(1)在 MySQL 中建立一个 maxwell 库用于存储 Maxwell 的元数据

mysql> CREATE DATABASE maxwell;

(2)设置 mysql 用户密码安全级别

mysql> set global validate_password_length=4;

mysql> set global validate_password_policy=0;

(3)分配一个账号可以操作该数据库

mysql> GRANT ALL ON maxwell.* TO ‘maxwell’@’%’ IDENTIFIED BY ‘123456’;

(4)分配这个账号可以监控其他数据库的权限

mysql> GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON . TO maxwell@’%’;

(5)刷新 mysql 表权限

mysql> flush privileges;

PS:可以通过mysql库的user表查看

2、启动Maxwell

进入Maxwell文件下:
(1)使用命令行参数启动 Maxwell 进程

bin/maxwell --user='maxwell' --password='123456' --host='IP'  --
producer=stdout

–user 连接 mysql 的用户
–password 连接 mysql 的用户的密码
–host mysql 安装的主机名
–producer 生产者模式(stdout:控制台 kafka:kafka 集群)

(2)修改配置文件,定制化启动 Maxwell 进程

[ maxwell-1.29.2]$ cp config.properties.example config.properties
[ maxwell-1.29.2]$ vim config.properties
[ maxwell-1.29.2]$ bin/maxwell --config ./config.properties

在这里插入图片描述

3、监控 Mysql 数据输出到 kafka

(1)启动 zookeeper 和 kafka

(2)启动 Maxwell 监控 binlog

bin/maxwell --user='maxwell' --password='123456' --host='IP' --producer=kafka --kafka.bootstrap.servers=IP:9092 --kafka_topic=maxwell

(3) 通过Kafka 查看

4、kafka 主题数据的分区控制

在公司生产环境中,我们一般都会用 maxwell 监控多个 mysql 库的数据,然后将这些数据发往 kafka 的一个主题 Topic,并且这个主题也肯定是多分区的,为了提高并发度。
(1)修改 maxwell 的配置文件,定制化启动 maxwell 进程
在这里插入图片描述

在这里插入图片描述
(2)手动创建一个 3 个分区的 topic,名字就叫做 maxwell3

kafka-topics.sh --zookeeper IP:2181,IP:2181,IP:2181/kafka --create --replication-factor 2 --partitions 3 --topic maxwell3

(3)利用配置文件启动 Maxwell 进程

bin/maxwell --config ./config.properties

5、监控 Mysql 指定表数据输出控制台

(1)运行 maxwell 来监控 mysql 指定表数据更新

bin/maxwell --user='maxwell' --password='123456' --host='IP' --filter 
'exclude: *.*, include:库.表' --producer=stdout

注:还可以设置 include:test_maxwell.*,通过此种方式来监控 mysql 某个库的所有表,也就是说过滤整个库。

6、监控 Mysql 指定表全量数据输出控制台,数据初始化

Maxwell 进程默认只能监控 mysql 的 binlog 日志的新增及变化的数据,但是Maxwell 是支持数据初始化的,可以通过修改 Maxwell 的元数据,来对 MySQL 的某张表进行数据初始化,也就是我们常说的全量同步。
(1)修改 Maxwell 的元数据,触发数据初始化机制,在 mysql 的 maxwell 库中 bootstrap表中插入一条数据,写明需要全量数据的库名和表名。

mysql> insert into maxwell.bootstrap(database_name,table_name) values('库','表');

(2) 重新启动Maxwell,就会初始化打印该表的所有数据
(3)当数据全部初始化完成以后,Maxwell 的元数据会变化

is_complete 字段从 0 变为 1
start_at 字段从 null 变为具体时间(数据同步开始时间)
complete_at 字段从 null 变为具体时间(数据同步结束时间

版权声明:本文为qq_44496147原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>