1、Maxwell介绍
maxwell读取MySQL二进制日志并以JSON格式将行更新写入到Kafka,Kinesis或其他流媒体平台。Maxwell的操作开销很低,只需要mysql和一个可写的地方即可。它的常见用例包括ETL,缓存建立/过期,指标收集,搜索索引和服务间通信,Maxwell为您提供了时间来源的一些优势,而无需重新架构整个平台。
2、数据示例
增加数据
代码语言:javascript复制 mysql> insert into `test`.`maxwell` set id = 1, daemon = 'Stanislaw Lem';
maxwell: {
"database": "test",
"table": "maxwell",
"type": "insert",
"ts": 1449786310,
"xid": 940752,
"commit": true,
"data": { "id":1, "daemon": "Stanislaw Lem" }
}
修改数据
代码语言:javascript复制mysql> update test.maxwell set daemon = 'firebus! firebus!' where id = 1;
maxwell: {
"database": "test",
"table": "maxwell",
"type": "update",
"ts": 1449786341,
"xid": 940786,
"commit": true,
"data": {"id":1, "daemon": "Firebus! Firebus!"},
"old": {"daemon": "Stanislaw Lem"}
}
3、Maxwell主要功能
- 支持Select * from table的方式进行全量数据初始化
- 支持在主库发生failover后,自动恢复binlog位置(GTID)
- 可以对数据进行分区,解决数据倾斜问题,发送到kafka的数据支持database、table、column等级别的数据分区
- 工作方式是伪装为Slave,接收binlog events,然后根据schemas信息拼装,可以接收ddl、xid、row等各种event
4、同类工具对比
除了Maxwell外,目前常用的MySQL Binlog解析工具主要有阿里的canal、mysql_streamer,三个工具对比如下:
bootstrap 引导程序
增量同步:MySQL ---> 中间件(canalmaxwell) --->Kafka---->?--->存储 Hbase/kudu/cassandra
全量: 使用bootstrap进行引导,作用是全量抽取mysql数据
代码语言:javascript复制Maxwell允许您将数据“引导”到流中。这将执行select * from table和将结果
输出到您的流中,从而允许您从头开始播放流来重新创建整个数据集
canal由Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大。
canal需要自己编写客户端来消费canal解析到的数据。
maxwell相对canal的优势是使用简单,它直接将数据变更输出为json字符串,不需要再编写客户端。