一、介绍
介绍:它读取MySQL binlog并将数据更改作为JSON写入Kafka、Kinesis和其他流媒体平台(目前支持:kafka、RabbitMQ、Redis、file、Kinesis、Nats、Google Cloud Pub/Sub、Google Cloud Bigquery、SNS)
版本:从v1.30.0版本开始不支持jdk1.8,支持jdk11,所以推荐使用v1.29.2版本
官网:https://maxwells-daemon.io/
二、安装配置
下载地址:https://github.com/zendesk/maxwell/releases/tag/v1.29.2
2.1、开启mysql binlog
# /etc/my.cnf
[mysqld]
#数据库id
server-id = 1
#启动binlog,该参数的值会作为binlog的文件名
log-bin=mysql-bin
#binlog类型,maxwell要求为row类型
binlog_format=row
#启用binlog的数据库,需根据实际情况作出修改
binlog-do-db=demo
2.2、解压缩
tar -zxvf maxwell-1.29.2.tar.gz -C maxwell
三、启动
启动命令执行之后会自动在对应的数据库中创建maxwell数据库用于存放元数据
3.1、将数据发送到kafka
bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' \
--producer=kafka --kafka.bootstrap.servers=localhost:9092 --kafka_topic=maxwell
3.2、将数据发送到rabbitmq
bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' \
--producer=rabbitmq --rabbitmq_host='rabbitmq.hostname'
3.3、将数据发送到redis
bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' \
--producer=redis --redis_host=redis.hostname
3.4、使用docker的方式将数据发送到kafka
docker run -it --rm zendesk/maxwell bin/maxwell --user=$MYSQL_USERNAME \
--password=$MYSQL_PASSWORD --host=$MYSQL_HOST --producer=kafka \
--kafka.bootstrap.servers=$KAFKA_HOST:$KAFKA_PORT --kafka_topic=maxwell
四、高可用
官网:https://maxwells-daemon.io/high_availability/
maxwell v1.29.2 版本不支持高可用,但是提供了采用 jgroups-raft 算法的高可用方案
五、过滤表
同步指定数据库的数据,支持一下两种方式进行过滤
--filter = 'exclude: foodb.*, include: foodb.tbl, include: foodb./table_\d+/'
--filter = 'exclude: *.*, include: db1.*'
六、全量同步
bin/maxwell-bootstrap --database fooDB --table barTable
bin/maxwell-bootstrap --database fooDB --table barTable --where "my_date >= '2017-01-07 00:00:00'"
七、总结
maxwell是一款采用Java开发的mysql数据同步中间件,支持全量/增量数据的同步,数据采用JSON的方式传输,无其他格式,不支持高可用,使用简单。