什么是异构数据
比如MYSQL和ElasticSearch 之间要同步数据
正常做法
团队A在Java代码中新增MYSQL数据时向调用团队B同步接口新建ES商品数据
这种方案的不足是团队A和团队B的协作产生代码强耦合,团队A必须了解团队B提供的接口才可以实现,但本身这并不属于团队A的工作范畴。
扩展困难,假设团队C的数据库是MongoDB也要这份数据,那么团队A是不是又要改代码跟C对接。
那怎么保证数据做到准实时同步,还要团队直接解耦,团队A不再背锅呢?
Canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持两颗MySQL(也支持MariaDB).
Canal简单来说就是假装自己是一个从库来获取主库的数据同步。
通过Canal解决了数据监听的问题,但是没有解决解耦的问题,还需要引入一个MQ.Canal监听到数据变化后,直接将消息登记到MQ中,团队B和团队C去订阅即可。
话说,这跟团队A直接手动把变化放到消息队列有啥太大区别?好像都差不多。唯一的好处可能就是数据的处理都是Canal来解决,而不用团队A写代码进行消息登记。