MaxWell读binlog发送到kafka

一、MaxWell简介

        国外zendesk开源的数据实时增量同步工具,maxwell操作开销低,跟canal一样也是伪装mysql的slave机器,发送dump协议,读取binlog文件,将数据库更新的数据写入到kafka等中间件,或者redis等。

二、优缺点及与canal的区别

        1,maxwell没有server-client模式,是由一个server把数据发送到kafka、redis中。

        2,maxwell有一个bootstrap功能,可以引导出完整的历史数据进行初始化。canal就只能读取最新的数据。

        3,maxwell支持断点还原,未来可能支持HA(高可用),canal支持HA,不支持断点还原。

        4,maxwell只支持json的数据格式,canal可以自定义

        5,maxwell比canal轻量。

三、安装和启动

        1,maxwell运行必须先要有java和maven环境,如果要将数据读到kafka,还要有kafka环境,并且要先运行kafka。

        2,maxwell官网下载安装包并解压

        3,因为读取的是mysql binlog文件,需要创建maxwell用户,并给用户分配监听的权限。

CREATE USER 'maxwell'@'%' identified by 'XXXXXX';
GRANT ALL on maxwell.* to 'maxwell'@'%' ;
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'maxwell'@'%';
FLUSH PRIVILEGES;

        4,运行maxwell,cd到maxwell的bin同级目录

//producer=stdout 直接输入到终端窗口
bin/maxwell --user='maxwell' --password='XXXXXX' --host=192.168.xx.xx --post=xxxx --producer=stdout

        即为启动成功。此时数据库发生变更,则会输出json数据:

{"database":"test","table":"mytest","type":"insert","ts":1535179251,"xid":205516,"commit":true,"data":{"id":1,"name":"aa","age":23,"as":"bb"}}
{"database":"test","table":"mytest","type":"update","ts":1535179973,"xid":206703,"commit":true,"data":{"id":1,"name":"aa","age":23,"as":"cc"},"old":{"as":"bb"}}

        主要字段说明:

                data:修改后的数据

                old:修改前的数据

                type:操作类型,也就是sql执行的类型,比如:insert, update, delete等

                xid:事务id

                commit:事务提交

                server_id,thread_id,运行程序时添加参数--output_ddl,可以捕捉到ddl语句

                datetime:输出格式为 "YYYY-MM-DD hh:mm:ss"

        输出到kafka的话执行命令(kafka可以添加多个分区):

//设置Kafka的服务器地址及topic
bin/maxwell --user='maxwell' --password='xxxxxx' --host='xxxx.xx.xx' --port=1668 --producer=kafka --kafka.bootstrap.servers=172.21.xx.xx1:9091,172.21.xx.xx2:9092,172.21.xx.xx3:9093 --kafka_topic=binlog_test
//后台启动加nohup &

        docker启动maxwell:

docker pull zendesk/maxwell
//-it是直接启动 -d后台启动
docker run -it --rm zendesk/maxwell bin/maxwell --user=maxwell --password=XXXXXX --host=192.168.xx.xx --producer=stdout

        还可以将配置信息写到config.properties文件中:

# kafka的连接地址,发送到的topic
producer=kafka
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
kafka_topic=gmall_realtime_spark_db_m
# 连接的MySQL信息
host=hadoop102
user=maxwell
password=xxx

        启动命令:

bin/maxwell --config /opt/module/maxwell/config.properties

四、maxwell 库内部表的说明

        启动maxwell后如果连接的数据库里没有maxwell库,则会自动创建一个:

 

主要表介绍:

        bootstrap --- 主要用于数据初始化

        schemas --- 记录所有的binlog文件信息;

        databases --- 记录了所有的数据库信息;

        tables --- 记录了所有的表信息;

        columns --- 记录了所有的字段信息;

        positions --- 记录了读取binlog的位移信息;

        heartbeats --- 记录了心跳信息;

五、项目中业务场景

        爬虫每天都会对数据库数据进行更新。所以将数据库的变更通过maxwell发送到Kafka里,然后再创建消费者对消息进行消费,根据业务将数据同步到es、redis、或者mangoDb里,达到数据最终一致性的效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

把烂笔头举起来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值