Smail_的gravatar头像
Smail_ 2017-10-19 09:47:11
探索基于日志增量订阅&消费支持的业务

问题:

一个老系统,现需对其进行缓存和搜索引擎数据的异步更新,又不想更改其原有代码,怎么办?

 

思考:

现有系统的mysql是主从读写分离的,从数据库是解析的主数据库的binlog日志实现的主从同步。那么是不是只要有个slave就能从主mysql拿到更改了数据,做到异步更新数据呢?

 

调研:

伪造mysql的slave,解析binlog!

 

探索:

第一个解决方案——阿里云的canal!

相关资料链接:https://github.com/alibaba/canal

调研了差不多6个小时,跑了一遍官方的example。

优点:技术成熟,得到了阿里内部的大量运用验证。

缺点:依赖较多,二次开发文档较少,不算轻量级。

重点:主要是不符合我现在的需求——解析binlog。

第二个解决方案——mysql-binlog-connector-java

相关资料链接:https://github.com/shyiko/mysql-binlog-connector-java

看到这个东西,我知道它符合我的需求了!花了20多分钟,看完了它的源码,然后撸了demo!

探索基于日志增量订阅&消费支持的业务

这是一个update的操作,key为修改前的row,value为修改后的row,完美!

足够轻量级!

注意,配置主mysql时采用canal的方式:

[mysqld]
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和中间件的slaveId重复

特别是binlog-format,很重要!

 

当然,还有其它的解决方案,比如:点评开源的 Puma!


打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
jeety太阳雨  LV14 2022年4月27日
whw010 2018年2月27日
暂无贡献等级
wgc_jy  LV21 2018年2月2日
低调人  LV38 2017年12月17日
297791083  LV1 2017年11月9日
程序猿全敏  LV29 2017年11月2日
陈箫goddess  LV16 2017年10月30日
fellowfun  LV12 2017年10月29日
gilbertguan2385 2017年10月28日
暂无贡献等级
lilizxc1234  LV9 2017年10月26日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友