实时数据同步工具<Maxwell入门简介及原理解析、安装部署>

文章目录

  • 一、Maxwell的定义
  • 二、Maxwell的工作原理
  • 三、Maxwell的安装部署


简述: 对于离线数仓项目中将MySQL中的数据同步到大数据平台使用的工具是sqoop,而我们在大数据处理中并不是只有离线计算,随着技术的发展,目前实时分析处理在大数据中占据了非常大的部分,那么在实时大数据项目中我们可以使用什么工具为我们将MySQL中的数据同步到大数据平台中呢!本文中的Maxwell就是为了解决这个问题的,接下来,让我们一起细细了解。

一、Maxwell的定义

Maxwell 是一个读取 MySQL binlogs 并将修改行字段的更新写入 Kafka, Kinesis, RabbitMQ, Google Cloud Pub/Sub 或 Redis (Pub/Sub or LPUSH) 以作为 JSON 的应用程序。

Maxwell 拥有可对底层进行操作的操作栏 (operational bar),可生成一致、易于获取的更新流,你可以轻松 “固定” 流处理系统的一些优点,而无需通过整个代码库来添加(不可靠)检测点。

  • 常见用例包括 ETL、缓存构建 / 到期、指标收集、搜索索引和服务间通信。
  • 可在表的初始加载过程中执行 SELECT * from table (bootstrapping)
  • 支持在 master promotion 上的自动位置恢复
  • 为 Kakfa 提供灵活的分区方案 —— 按数据库、表、主键或字段进行

Maxwell 通过充当完整的 mysql 副本来完成所有这些操作,包括用于 create/alter/drop 语句的 SQL 解析器。

官网地址:https://maxwells-daemon.io/

二、Maxwell的工作原理

由于maxwell的工作是同步MySQL中的数据,那么我们先思考一下在MySQL集群中,MySQL集群节点间是如何实现数据同步的。

2.1 MySQL之间的数据同步原理—主从复制

  • MySQL集群的Master主库将改变记录,写入到二进制日志(binary log)中;

  • MySQL从节点从库中向Master发送dump协议,将master主库的binary log events 拷贝到它的中继日志(relay log)中;

  • MySQL从节点从库中读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。

    MySQL主从复制原理图:
    实时数据同步工具<Maxwell入门简介及原理解析、安装部署>_第1张图片

2.2 MySQL的binlog文件

  • 1 什么是binlog

binlog是MySQL 的一个二进制日志文件,它以事件形式记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里(但是对库表等内容的查询不会记录),还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。
一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景:
     ➢ - 其一:MySQL Replication 在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 来达到 master-slave 数据一致的目的。
     ➢ 其二:自然就是数据恢复了,通过使用 mysqlbinlog 工具来使恢复数据。
二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的 DDL 和 DML(除了数据查询语句)语句事件。

  • 2 binlog的开启
    开启MySQL的binlog功能的步骤:

    1. 再安装MySQL的机器中找到MySQL配置文件的位置
      通过命令 locate my.cnf 查找
    2. 修改配置文件,添加 log-bin=mysql-bin
      mysql-bin这个是之后logbin文件命名的前缀,可自定义
      生成的文件实例:mysql-bin.000001,文件后面的数字按顺序生成,每次 mysql 重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。
  • 3 binlog 的分类设置
    mysql binlog 的格式有三种,分别是 STATEMENT,MIXED,ROW。
    在配置文件中可以选择配置 binlog_format= statement|mixed|row
    三种格式的区别:
    statement

    语句级,binlog 会记录每次一执行写操作的语句。
    相对 row 模式节省空间,但是可能产生不一致性,比如
    update test set create_date=now();
    如果用 binlog 日志进行恢复,由于执行时间不同可能产生的数据就不同。
    优点: 节省空间
    缺点: 有可能造成数据不一致。

    row

    行级, binlog 会记录每次操作后每行记录的变化。
    优点:保持数据的绝对一致性。因为不管 sql 是什么,引用了什么函数,他只记录
    执行后的效果。
    缺点:占用较大空间。

    mixed

    混合级别,statement 的升级版,一定程度上解决了 statement 模式因为一些情况
    而造成的数据不一致问题。
    默认还是 statement,在某些情况下,譬如:
    (1)当函数中包含 UUID() 时;
    (2)包含 AUTO_INCREMENT 字段的表被更新时;
    (3)执行 INSERT DELAYED 语句时;
    (4)用 UDF 时;
    会按照 ROW 的方式进行处理
    优点:节省空间,同时兼顾了一定的一致性。
    缺点:还有些极个别情况依旧会造成不一致,另外 statement 和 mixed 对于需要对
    binlog 监控的情况都不方便。

    综合比较,maxwell做监控分析使用row格式比较合适

  • 2.4 为什么原则maxwell
    常用的实时数据同步工具由Maxwell和Canal,那么我们对这两个组件进行一下比较:

    对比 Maxwell Canal
    语言 java java
    数据格式 json 格式自由
    采集数据模式 全量/增量 增量
    数据落地 支持kafka等多种平台 定制
    HA 支持 支持

三、Maxwell的安装部署

  • 3.1 安装包下载地址与版本选择
    链接:https://pan.baidu.com/s/1QhDun9j8X8iZJVGdW-2Uqw?pwd=1111
    提取码:1111
    版本选择的是1.29.2,因为高于这个版本的进行了改版,只有基于Java11才能运行,但是1.29.2及前面版本支持java8,而企业中目前大多数都是基于Java8设计的系统。因此本文中选择的版本就是1.29.2

  • 3.2 安装部署
    1) 提前安装好zookeeper 和 kafka,以及MySQL
    2)上传maxwell-1.29.2.tar.gz到/opt/soft/目录下
    3)解压maxwell-1.29.2.tar.gz到/opt/module目录下

    tar -zvxf maxwell-1.29.2.tar.gz -C /opt/module/

  • 3.3 MySQL环境准备
    1)修改mysql的配置文件,开启binlog设置

    [root@bigdata01 /]# vim /usr/my.cnf[mysqld]模块下添加一下内容
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    binlog_format=row
    #binlog-do-db=test_maxwell
    
    重启MySQL服务
    [root@bigdata01 /]# service mysql restart
    
    登录mysql并查看是否修改完成
    [root@bigdata01 /]# mysql -uroot -p123456
    
    mysql> show variables like '%binlog%';
    当有下列属性时表示开启成功
    | binlog_format                           | ROW                  |
    

    2)进入/var/lib/mysql目录下,查看MySQL是否生成的binlog文件
    当出现下面两个文件时就表示

    [root@bigdata01 /]# cd var/lib/mysql/
    [root@bigdata01 mysql]# ll
    -rw-rw----. 1 mysql mysql      154 Oct  1 10:53 mysql-bin.000001
    -rw-rw----. 1 mysql mysql       19 Oct  1 22:03 mysql-bin.index
    
    

    注意:

    MySQL 生成的 binlog 文件初始大小一定是 154 字节,然后前缀是 log-bin 参数配
    置的,后缀是默认从.000001,然后依次递增。除了 binlog 文件文件以外,MySQL 还会额外
    生产一个.index 索引文件用来记录当前使用的 binlog 文件。

    3) 初始化Maxwell元数据库
    (1)再MySQL中创建一个数据库maxwell,用于存储Maxwell的元数据信息

    	[root@bigdata01 mysql]# mysql -uroot -p123456
    	
    	create database maxwell;
    

    (2) MySQL5.7一下忽略此步骤,因为再mysql.5.7以及之后的版本中默认密码最少为八位,因此如果我们使用的话许需要修改用户密码的安全级别

    set global validate_password_length=4;
    set global validate_password_policy=0;
    

    (3)为Maxwell库创建一个用户,并将maxwell的所有权限都交给该用户

     grant all on maxwell.* TO 'maxwell'@'%' identified by '123456';
    

    (4) 为用户maxwell分配监控其他数据库的权限(只读权限)

    grant  select , replication slave , replication client on *.* to maxwell@'%'; 
    

    (5)刷新mysql表权限

     flush privileges
    
  • 3.4 Maxwell的启动
    Maxwell的启动方式通常有两种

  • 1)使用命令行参数启动Maxwell

    [atguigu@hadoop102 maxwell-1.29.2]$ bin/maxwell --user=‘maxwell’ --password=‘123456’ --host=‘hadoop102’ --producer=stdout

    参数解释:
    –use:连接数据库的用户名
    –password:连接数据库的用户名对应密码
    –host: 数据库所在的主机名或者IP地址
    –producer 生产者模式(stdout表示输出到控制台,kafka表示输出到kafka集群)

    2)配置好config.properties定制化启动Maxwell
    首先将/opt/module/maxwell…/目录下的config.properties.exmple文件改名

    mv config.properties.exmple config.properties
    

    对config.properties进行配置

    [root@bigdata01 maxwell-1.29.2]# vim config.properties
    producer=stdout
    kafka.bootstrap.servers=bigdata01:9092
    host=bigdata01
    user=maxwell
    password=123456
    

    启动Maxwell

    bin/maxwell
    

    在这里插入图片描述

你可能感兴趣的:(数据同步工具,大数据,实时数据,数据同步,mysql)