Maxwell安装、配置、脚本制作
1 安装
cd /data/software wget https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz tar -zxvf maxwell-1.29.2.tar.gz -C /data/module/ cd /data/module/ mv maxwell-1.29.2 maxwell
2 配置MySQL(maxwell元数据存储)
2.1 启用binlog
mysql默认未开启,使用maxwell需要开启。 修改mysql配置文件,添加binlog配置项:
vim /etc/my.cnf
[mysqld] #数据库id(主从类型、集群类型数据库必须配) server-id = 1 #启动binlog,该参数的值会作为binlog的文件名 log-bin=mysql-bin #binlog类型,maxwell要求为row类型,不能为statement-based或mixed类型。 binlog_format=row #启用binlog的数据库,需根据实际情况作出修改 binlog-do-db=testdb1 ... binlog-do-db=testdb2 binlog-do-db=testdb3 ... binlog-ignore-db=testdb4 #忽略该数据库 expire_logs_days=7
后续maxwell库的positions表里,将直接记录该binlog相关配置信息,如: server_id字段:保存这里的server-id,即1 binlog_file字段:保存滚动生成的log-bin,即以mysql-bin开头的binlog日志文件名,如mysql-bin.000001 binlog_position字段:保存当前的binlog偏移量
2.2 创建Maxwell元数据库和用户
Maxwell在MySQL中存储其运行时所需的一些重要数据,比如binlog同步的断点位置(Maxwell据此支持断点续传功能)等,需要在MySQL为Maxwell创建数据库及授权访问的用户。
2.3 建库、建用户
在mysql 服务器 db_server_1 上:
1)建库 msyql> CREATE DATABASE maxwell; 2)调整MySQL数据库密码级别为弱密码,Prod环境禁用 mysql> set global validate_password_policy=0; mysql> set global validate_password_length=4; 3)建Maxwell用户&赋权 mysql> CREATE USER maxwell@% IDENTIFIED BY maxwell; mysql> GRANT ALL ON maxwell.* TO maxwell@%; mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO maxwell@%;
3 配置Maxwell
3.1 从模板中生成Maxwell配置文件
cd /data/module/maxwell cp config.properties.example config.properties
3.2 修改Maxwell配置文件
vim config.properties
#Maxwell数据发送目的地,可选配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis producer=kafka #目标Kafka集群地址 kafka.bootstrap.servers=kfk_serv_1:9092,kfk_serv_2:9092,kfk_serv_3:9092 #目标Kafka topic # 1) 静态配置方式,例如:topic_test # 2) 动态配置方式,例如:%{database}_%{table} kafka_topic=topic_test #MySQL相关配置 host=db_server_1 user=maxwell password=maxwell jdbc_options=useSSL=false&serverTimezone=Asia/Shanghai
4 使用Maxwell
4.1 启动命令
/data/module/maxwell/bin/maxwell --config /data/module/maxwell/config.properties --daemon
4.2 停止命令
ps -ef | grep com.zendesk.maxwell.Maxwell | grep bigdata_admin | grep -v grep | awk ‘{print $2}’ | xargs kill -9
4.3 启停脚本
maxwell_mgr.sh
#!/bin/bash MAXWELL_HOME=/data/module/maxwell status_maxwell(){ result=`ps -ef|grep com.zendesk.maxwell.Maxwell|grep bigdata_admin|grep -v grep|wc -l` return $result } start_maxwell(){ status_maxwell cnt=$? echo "当前开启的maxwell进程有"$cnt"个" if [[ $cnt -lt 1 ]];then echo "启动Maxwell" $MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemon else echo "Maxwell正在运行" fi } stop_maxwell(){ status_maxwell cnt=$? echo "当前开启的maxwell进程有"$cnt"个" if [[ $cnt -gt 0 ]];then echo "停止Maxwell" ps -ef|grep com.zendesk.maxwell.Maxwell|grep bigdata_admin|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
脚本存储位置:/home/bigdata_admin/bin 脚本赋权: chmod 777 maxwell_mgr.sh
启|停|重启脚本: sh maxwell_mgr.sh [start|stop|restart]
5 Maxwell全量历史表同步
正式上线时(或由于补数据需要),在增量数据同步前,通常需要将mysql历史数据(从产生到当前)全量同步一遍,以保证数据的完整性,此时可以借助maxwell-bootstrap命令。
5.1 maxwell-bootstrap命令用法
Maxwell提供了maxwell-bootstrap功能来进行历史数据的全量同步,命令如下:
/data/module/maxwell/bin/maxwell-bootstrap --database testdb1 --table orders --config /data/module/maxwell/config.properties
5.2 注意事项
注意事项: 1)第一条type为bootstrap-start和最后一条type为bootstrap-complete的数据,是bootstrap开始和结束的标志,不包含数据; 2)中间阶段type为bootstrap-insert的数据才会包含数据; 3)一次bootstrap输出的所有记录的ts时间戳均相同,为maxwell-bootstrap抽取数据的时刻。