大数据技术之MaxWell

目录

第1章 Maxwell介绍

1.1 Maxwell概述

1.2 Maxwell输出数据格式

第2章 Maxwell架构原理

2.1 MySql二级制日志

2.2 Mysql主从复制

2.3 Maxwell原理

第3章 Maxwell部署

3.1 上传解压

3.2 配置MySQL

3.2.1 启动MySQL Binlog

3.2.2 创建Maxwell所需数据库和用户

3.3 配置Maxwell

第4章 Maxwell使用

4.1 Maxwell启动和停止

4.2 历史数据全量同步

4.2.1 背景


第1章 Maxwell介绍

1.1 Maxwell概述

1. 介绍:Maxwell是由美国Zendesk公司开源,使用Java编写的MySQL变更数据抓取软件。他会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以JSON的格式发送给Kafka、Kinesi等流数据处理平台。

Maxwell官网地址:Maxwell's Daemon

Maxwellgithub地址:https://github.com/zendesk/maxwel

1.2 Maxwell输出数据格式

第2章 Maxwell架构原理

        Maxwell的工作原理是实时读取Mysql数据库的二进制日志--Binlog,从中获取变更数据,再将变更数据以Json的格式发送至Kafka等流处理平台。

2.1 MySql二级制日志

1. 二进制日志(Binglog):就是Msyql服务端非常重要的一种日志,他会保存Msyql数据库的所有数据变更记录。

2. Binglog的主要作用包括主从复制数据恢复。Maxwell的工作原理和主从复制密切相关。

2.2 Mysql主从复制

1. Mysql主从复制:就是用来建立一个和主数据库完全一样的数据库环境,这个数据库称为从数据库。

2. 主从复制的应用场景:

热备:主数据库服务器故障后,可切换到从数据库继续工作。

读写分离:主数据库只负责业务数据的写入操作,而多个从数据库只负责业务数据的查询工作,在读多写少场景下,可以提高数据库的工作效率。

3. MySQL主从复制原理示意图

 4. Mysql主从复制工作原理

① Master主库接收到数据变更请求,完成数据变更,并将其写到二级制日志(binary log)中。

② Slave从库向Mysql master发送dump协议,将Master主库的binary log events拷贝到从库的中继日志(relay log)中。

③ Slave从库读取并回放中继日志中的事件,将更新的数据同步到自己的数据库中。

2.3 Maxwell原理

        Maxwell的实现原理很简单,就是将自己伪装成Slave,并遵循Mysql主从复制的协议,从master中同步数据。


第3章 Maxwell部署

3.1 上传解压

安装地址:下载

3.2 配置MySQL

3.2.1 启动MySQL Binlog

Mysql服务器的Binlog默认是未开启的,如需进行同步,需要将MySQL的Binlog开启。

1. 修改MySQL的配置文件/etc/my.cnf

[hadoop102 software]$ sudo vim /etc/my.cnf

[mysqld]
#数据库id
server-id=1
#启动Binlog,该参数的值会作为binlog的文件名前缀
log-bin=mysql-bin
#binlog类型,maxwell要求为row类型
binlog_format=row
#启动binlog的数据库,需根据实际情况修改配置
binlog-do-db=gmall

2. Mysql Binlog模式介绍

① Statement-based: 基于语句,Binlog会记录所有写操作的SQL语句,包括:insert、update、delete等。

                    优点:节省空间;

                    缺点:有可能造成数据不一致,如:insert语句中包含now()函数。

② Row-based基于,Binlog会记录每次写操作的被操作行记录的变化

                    优点:保持数据的绝对一致性

                    缺点:占用较大空间

③ mixed  混合模式,默认是Statement-based,如果SQL语句可能导致数据不一致,就自动切换到Row-based

Maxwell要求Binlog采用Row-based模式

3. 重启Mysql服务

sudo systemctl restart mysqld

3.2.2 创建Maxwell所需数据库和用户

        Maxwell需要在MySQL中存储其运行过程中的所需数据,如:binlog同步的断点位置等,所以我们需要在MySQL中为其创建数据库和用户。

1. 创建数据库
mysql> create database maxwell;
2. 创建Maxwell用户,
mysql> create user 'maxwell'@'%' identified by 'maxwell';
Query OK, 0 rows affected (0.00 sec)
3. 如果这里报错,说明密码的等级配置过高,调整Mysql数据库的密码级别
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=4;
4. 并赋予其必要权限
mysql> grant all on maxwell.* to 'maxwell'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant select, replication client, replication slave on *.* to 'maxwell'@'%';
Query OK, 0 rows affected (0.00 sec)

3.3 配置Maxwell

修改Maxwell的配置文件config.properties,主要是配置数据发送的目的地。

1. 配置文件在maxwell根目录下,复制一份模板,并重命名为config.properties
[hadoop102 maxwell-1.29.2]$ mv config.properties.example config.properties

2. 编辑配置文件
[hadoop102 maxwell-1.29.2]$ vim config.properties
#Maxwell数据发送目的地,可选配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis
producer=kafka
#目标Kafka集群地址
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
#目标Kafka topic,可静态配置,例如:maxwell,也可动态配置,例如:%{database}_%{table}
kafka_topic=maxwell

#MySQL相关配置
host=hadoop102
user=maxwell
password=maxwell
jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai

若Maxwell发送数据的目的地是kafka集群,需要首先将kafka集群启动。

1. 启动Maxwell
[hadoop102 maxwell]$ bin/maxwell --config config.properties --daemon

2. 停止Maxwell
[hadoop102 maxwell]$ ps -ef | grep maxwell | grep -v grep | grep maxwell | awk '{print $2}' | xargs kill -9

第4章 Maxwell使用

4.1 Maxwell启动和停止

1. Maxwell启动停止脚本maxwell.sh

#!/bin/bash

MAXWELL_HOME=/opt/module/maxwell

status_maxwell(){
    result=`ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l`
    return $result
}


start_maxwell(){
    status_maxwell
    if [[ $? -lt 1 ]]; then
        echo "启动Maxwell"
        $MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemon
    else
        echo "Maxwell正在运行"
    fi
}


stop_maxwell(){
    status_maxwell
    if [[ $? -gt 0 ]]; then
        echo "停止Maxwell"
        ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9
    else
        echo "Maxwell未在运行"
    fi
}


case $1 in
    start )
        start_maxwell
    ;;
    stop )
        stop_maxwell
    ;;
    restart )
       stop_maxwell
       start_maxwell
    ;;
esac

4.2 历史数据全量同步

4.2.1 背景

        我们已经实现了使用Maxwell实时增量同步MySQL变更数据的功能。但是,有时候只有增量数据是不够的,我们可能需要使用到Mysql数据库中从历史至今的一个完整的数据集。这就需要问我们在进行增量同步之前,先进行一次历史数据全量同步。这样就能保证得到一个完整的数据库。

1. Maxwell提供了bootstrap功能来进行历史数据的全量同步(前提要部署一个maxwell),命令如下:

[hadoop102 maxwell]$ bin/maxwell-bootstrap --database gmall --table user_info --config config.properties

猜你喜欢

转载自blog.csdn.net/m0_57126939/article/details/130046795