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!
评论
最近浏览
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日