四川城乡建设官方网站,北京响应式网站建设公司,做淘宝的网站,配资网站建设大数据技术之Maxwell基础知识 文章目录大数据技术之Maxwell基础知识0、写在前面1、Maxwell 概述1.1 Maxwell 定义1.2 Maxwell 工作原理1.2.1 MySQL 主从复制过程1.2.2 Maxwell 的工作原理1.2.3 MySQL 的 binlog1.3 Maxwell与Cannal对比2. Maxwell 使用2.1 Maxwell 安装部署2.1.…大数据技术之Maxwell基础知识 文章目录大数据技术之Maxwell基础知识0、写在前面1、Maxwell 概述1.1 Maxwell 定义1.2 Maxwell 工作原理1.2.1 MySQL 主从复制过程1.2.2 Maxwell 的工作原理1.2.3 MySQL 的 binlog1.3 Maxwell与Cannal对比2. Maxwell 使用2.1 Maxwell 安装部署2.1.1 安装地址2.1.2 安装部署2.1.3 MySQL 环境准备2.1.4 初始化 Maxwell 元数据库2.1.5 Maxwell 进程启动0、写在前面 1.3.0版本开始不支持JDK8本文是尚硅谷的教学文档并加以个人学习记录 Maxwell版本Maxwell1.2.9Zookeeper版本Zookeeper3.4.5Kafka版本Kafka2.4.1MySQL版本MySQL5.7
1、Maxwell 概述
1.1 Maxwell 定义
Maxwell 是由美国 Zendesk 开源用 Java 编写的 MySQL 实时抓取软件。 实时读取 MySQL 二进制日志 Binlog并生成JSON格式的消息作为生产者发送给 KafkaKinesis、 RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序。 官网地址http://maxwells-daemon.io/ 1.2 Maxwell 工作原理
1.2.1 MySQL 主从复制过程 Master 主库将改变记录写到二进制日志(binary log)中 Slave 从库向 mysql master 发送 dump 协议将 master 主库的 binary log events 拷贝到它的中继日志(relay log) Slave 从库读取并重做中继日志中的事件将改变的数据同步到自己的数据库。 1.2.2 Maxwell 的工作原理 Maxwell 的工作原理很简单就是把自己伪装成 MySQL 的一个 slave然后以 slave的身份假装从 MySQL(master)复制数据。 1.2.3 MySQL 的 binlog
1什么是 binlog
MySQL 的二进制日志可以说 MySQL 最重要的日志了它记录了所有的 DDL 和DML(除了数据查询语句)语句以事件形式记录还包含语句所执行的消耗的时间MySQL 的二进制日志是事务安全型的。 一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景: 其一MySQL Replication 在 Master 端开启binlogMaster 把它的二进制日志传递给 slaves 来达到 master-slave 数据一致的目的。 其二自然就是数据恢复了通过使用 mysqlbinlog 工具来使恢复数据。
二进制日志包括两类文件二进制日志索引文件文件名后缀为.index用于记录所有的二进制文件二进制日志文件文件名后缀为.00000*记录数据库所有的 DDL 和DML(除了数据查询语句)语句事件。
2binlog 的开启 找到 MySQL 配置文件的位置 Linux: /etc/my.cnf 如果/etc 目录下没有可以通过 locate my.cnf 查找位置 Windows: MySQL安装目录下的\my.ini文件 在 mysql 的配置文件下,修改配置 在[mysqld] 区块设置/添加 log-binmysql-bin
这个表示binlog 日志的前缀是 mysql-bin以后生成的日志文件就是 mysql-bin.000001的文件后面的数字按顺序生成每次 mysql 重启或者到达单个文件大小的阈值时新生一个文件按顺序编号。
3binlog 的分类设置
mysql的binlog 格式有三种分别是 STATEMENTMIXEDROW。
在配置文件中可以选择配置 binlog_formatstatement|mixed|row 三种格式的区别 statement
语句级binlog 会记录每次一执行写操作的语句。
相对 row 模式节省空间但是可能产生不一致性比如
update test set create_datenow();如果用 binlog 日志进行恢复由于执行时间不同可能产生的数据就不同。 优点 节省空间 缺点 有可能造成数据不一致。 row
行级 binlog 会记录每次操作后每行记录的变化。 优点保持数据的绝对一致性。因为不管 sql 是什么引用了什么函数他只记录执行后的效果。 缺点占用较大空间。 mixed
混合级别statement 的升级版一定程度上解决了 statement 模式因为一些情况而造成的数据不一致问题。
默认还是statement在某些情况下譬如 当函数中包含 UUID() 时 包含 AUTO_INCREMENT 字段的表被更新时 执行 INSERT DELAYED 语句时 用 UDF 时 会按照 ROW 的方式进行处理。 优点节省空间同时兼顾了一定的一致性。 缺点还有些极个别情况依旧会造成不一致另外 statement 和 mixed 对于需要对 三种方式binlog 监控的情况都不方便。 综合上面对比Maxwell 适合做监控分析选择 row格式比较合适 1.3 Maxwell与Cannal对比
对比CanalMaxwell语言javajava数据格式格式自由json采集数据模式增量全量/增量数据落地定制支持 kafka 等多种平台HA支持支持
2. Maxwell 使用
2.1 Maxwell 安装部署
2.1.1 安装地址
1 Maxwell 官网地址http://maxwells-daemon.io/
2 文档查看地址http://maxwells-daemon.io/quickstart/
2.1.2 安装部署
1 软件基础读者需要提前安装好 kafka 和 MySQL此文档不再赘述。
2 上传 maxwell-1.29.2.tar.gz 到/opt/software 下
3 解压 maxwell-1.29.2.tar.gz 的安装包到/opt/module 下
[whybigdatanode01 software]$ tar -zxvf maxwell-1.29.2.tar.gz - C /opt/module/2.1.3 MySQL 环境准备
1修改 mysql 的配置文件开启 MySQL
[whybigdatanode01 software]$ sudo vim /etc/my.cnf
在[mysqld]模块下添加以下内容
[mysqld] server_id1
log-binmysql-bin binlog_formatrow
#binlog-do-dbtest_maxwell并重启 Mysql 服务
[whybigdatanode01 software]$ sudo systemctl restart mysqld登录 mysql 并查看是否修改完成
[whybigdatanode01 ~]$ mysql -uroot -p123456 mysql show variables like %binlog%;
查看下列属性
binlog_format | ROWbinlog-do-dbtest_maxwell表示只监控test_maxwell这个库不加这个参数表示监控所有库; 监控多个库例如test_maxwell、my_test,不能写成「binlog-do-dbtest_maxwell,my_test」必须写成 binlog-do-dbtest_maxwell
binlog-do-dbmy_test如果想监控上百个库上述方法过于繁琐可以直接设置不需要监控的库 binlog-ignore-dbtest_maxwell_100002进入/var/lib/mysql 目录查看 MySQL 生成的 binlog 文件
[whybigdatanode01 ~]$ cd /var/lib/mysql
[whybigdatanode01 mysql]$ sudo ls -l
总用量 188500
-rw-r-----. 1 mysql mysql 154 11 月 17 16:30 mysql-bin.000001
-rw-r-----. 1 mysql mysql 154 11 月 17 16:30 mysql-bin.index注MySQL 生成的 binlog 文件初始大小一定是 154 字节然后前缀是 log-bin 参数配置的后缀是默认从.000001然后依次递增。除了 binlog 文件文件以外MySQL 还会额外生产一个.index 索引文件用来记录当前使用的 binlog 文件。 2.1.4 初始化 Maxwell 元数据库
1 在 MySQL 中建立一个 maxwell 库用于存储 Maxwell 的元数据
[whybigdatanode01 module]$ mysql -uroot -p123456
mysql CREATE DATABASE maxwell;2 设置 mysql 用户密码安全级别
mysql set global validate_password_length4;
mysql set global validate_password_policy0;此处如果出现错误请尝试以下方式 install plugin validate_password soname validate_password.so;3 分配一个账号可以操作该数据库 123456是指你自己设置的maxwell用户的密码 mysql GRANT ALL ON maxwell.* TO maxwell% IDENTIFIED BY 1234564分配这个账号可以监控其他数据库的权限
mysql GRANT SELECT ,REPLICATION SLAVE , REPLICATION CLIENT ON *.* TO maxwell%;5刷新权限
mysql flush privileges;mysql库下的user表; 2.1.5 Maxwell 进程启动
Maxwell 进程启动方式有如下两种
1 使用命令行参数启动 Maxwell 进程
[whybigdatanode01 maxwell-1.29.2]$ bin/maxwell --usermaxwell --password123456 --hostnode01producerstdoutuser 连接 mysql 的用户 password 连接 mysql 的用户的密码 host mysql 安装的主机名 producer 生产者模式(stdout控制台 kafkakafka 集群) 启动结果 监控实例新增数据 2修改配置文件定制化启动 Maxwell 进程
[whybigdatanode01 maxwell-1.29.2]$ cp config.properties.example config.properties
[whybigdatanode01 maxwell-1.29.2]$ vim config.properties
[whybigdatanode01 maxwell-1.29.2]$ bin/maxwell -- config ./config.properties启动结果 监控update的数据 结束