maxwell
maxwell实现原理其实就是会在数据源端的库默认maxwell生成对应的position信息,通过记录binlog的position位点来实现断点还原。当然我们也可以手动更新数据库position位置。maxwell库中还会有table,schema,bootstrap表,其中bootstrap可以进行表引导操作。
canal
而canal则是单纯的依靠binlog的position位点记录,解析binlog数据发送到kafka或其他组件。(1.1.*已经支持es,redis,kafka,web界面等多功能)
canal-admin web模块
canal-server 采集数据,解析binlog 配置实例,mysql的信息
canal-adapter (1.1.*已经可以同步kafka,es,hbase,logger,RDB,MongoDB,Redis)
maxwell和canal的区别:
maxwell和canal都是基于mysql的binlog,
- canal1.1.*版本之前不支持数据到kafka.只能通过手动开发完成。
- maxwell只支持json格式,而canal的格式比较自由。
- maxwell部署非常方便,服务端客户端一体化。canal则有adapter,serer需要分开部署。canal相对更丰满一些
- canal支持HA,maxwell支持断点还原。
- maxwell支持bootstrap,对于数据初始化来说,canal还不支持。
- maxwell支持全量增量同步到kafka.canal全量暂时只能通过接口形式调用.
- canal依靠binlog的位点记录位置,maxwell自己记录了position。
问题
都会面临到kafka数据倾斜问题。都可以通过配置进行设置分区依据。
只能保证分区有序。maxwell分区级别有rowkey,table,database。需要保证表的顺序,只能通过table级别设置,也就是相同的表到一个分区中。
使用场景:
maxwell相对单一,定位就是mysql->kafka,部署很方便,适合短时间内项目快速迭代的场景。