- 浏览: 1597759 次
- 性别:
- 来自: 杭州
最新评论
-
jsrgzhangzhiyong:
关于null值的转换还是感觉不太友好,就像 mapstruct ...
我也造了个轮子:BeanMapping(属性拷贝) -
he037:
a417930422 写道引用使用EPHEMERAL会引出一个 ...
基于zookeeper的分布式lock实现 -
seancheer:
qianshangding 写道首先节点启动后,尝试读取本地的 ...
zookeeper学习记录三(session,watcher,persit机制) -
雪夜归人:
您好,我想咨询一下,开源的canal都能支持mysql的哪些版 ...
Canal BinlogChange(mysql5.6) -
zhoudengyun:
copy 一份做记录,后续学习,请知悉
阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
文章列表
Canal介绍
基于mysql数据库binlog的增量订阅&消费
QuickStart
几点说明:(mysql初始化)
a. canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,并且配置binlog模式为row.
[mysqld]
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
b. canal的原理是模拟自己为my ...
背景
最近折腾的数据库同步项目中,大量使用了zookeeper(版本3.3.3),可以说是强依赖,但是最近频频出现zookeeper内存使用率达到100%,而且是GC不掉,直接导致整个系统挂起,伤不起阿
分析
因为大部分的情况都是无法GC回收,所以很大程度上怀疑出现memory leak。
设置了jvm参数,收集了一下OOM导致jvm crash之后的日志文件进行分析
-XX:+HeapDumpOnOutOfMemoryError
leak分析:
从leak分析来看,比较明显,99%的内存都被Leader类的observingLearners给吃光了,所以 ...
背景
项目中使用了zookeeper进行的类似工作流引擎的工作流转,将一次工作请求拆分了4个节点(S/E/T/L)。S阶段做完后,通过zk的watcher触发下一个E节点进行处理,S和E可能为不同的jvm上,所以需要走一个分布式的消息进行通知。
...
背景
距离上一篇文章已经有4个多月了,这4个多月一直在忙着做一个数据库同步产品的代码研发和测试,现在基本运行稳定。 本文主要介绍一下,当时使用apache oro包进行正则过滤时,使用时出现的一个并发问题,排查了好几天才找到原因。希望大家使用时引以为戒,望周知。
过程
简单的描述下,我使用apache oro的场景: 进行数据库同步时,我们会根据定义的表名进行匹配,从binlog的数据流中提取出我们关心的表,然后进行解析,压缩,传输,写入目标库等一系列动作。
然而在线下测试环境中,冒出一个比较异常的情况,数据没有被正常的同步到目标库(概率发生的比较小,每次jvm重启后才可能出 ...
背景
最近资讯asyncload使用的同学越来越多,会有些一些经常性的问题,这里我做一下整理和answer,同时介绍一下asyncload的UserGuide 和一些限制等。
关于asyncload,又名异步并行加载 ,可参见我之前的文章: (业务层)异步并行加载技术分析和设计
UserGuide篇
几个基本概念:
线程池 (定义异步处理的线程池模型,包括线程数,队列大小等)
匹配信息 (定义哪些方法需要实施,包括超时时间等)
匹配主体 (比如常见的service,dao等,需要进行异步并行加载处理的对象)
声明式: 常规配置(半侵入)
基本步骤:
1. 配置 ...
背景
BeanMapping是什么? 请查看我之前的一篇文章: 我也造了个轮子:BeanMapping(属性拷贝)
版本变更内容
convetor包名重构,拼写错误
ScriptExecutor接口重构,加上ScriptContext操作
FiledSetExecutor去除对args的强制匹配依 ...
背景
这几天在做数据自动化同步测试过程,发现一个诡异的现象。一批100条语句的更新过程中,同步到目标库去执行,总会有几条记录出现更新失败。
原因
1. 查看了同步过程中的执行日志,也米有啥特别明显的问题,单就是update affect = 0 。
2. 问题的查找方式也是比较简单,针对底层执行的update语句,挨个字段确认,到底是哪一个字段影响了记录的定位。 最后发现是一个Decimal(19,8)的字段类型。
3. debug跟踪了下对应的mysql driver代码,发现针对setBigDecimal类型数据处理时,多了个单引号,字段内容就变成了 '1234.12312'. ...
背景
在线上运行的一个数据库同步系统,突然在某一天发现了一条奇怪的数据。 出现了如下异常:
SQL state [99999]; error code [17361]; Year out of range.; nested exception is java.sql.SQLException: Year out of range.:
分析其对应的数据内容,就发现了有一个Oracle的Date类型的数据字段,返回了-235316004988000L.
EventColumn[index=0,columnType=93,columnName=RESERVED_TIM ...
背景
BeanMapping是什么? 请查看我之前的一篇文章: 我也造了个轮子:BeanMapping(属性拷贝)
现状
目前代码经过在一个实际项目中进行试用,该项目为公司的核心业务逻辑(产品页面数据),目前表现良好。
在原先的1.0.0版本基础上修复了几个bug,目前推荐使用1.0.1。
下载
url : https://github.com/agapple/mapping4java/tags
mvn仓库:
<dependency>
<groupId>com.googlecode.mapping4java</grou ...
背景
前段时间一个项目中因为涉及大量的线程开发,把jdk cocurrent的代码重新再过了一遍。这篇文章中主要是记录一下学习ThreadPoolExecutor过程中容易被人忽略的点,Doug Lea的整个类设计还是非常nice的
正文
先看一副图, ...
近段时间,因项目需要接触了下zookeeper,通过阅读源码以及项目中的使用总结,慢慢的积累了zookeeper的一系列的学习总结。
希望对大家使用zookeeper有所帮助,同时如有描述欠佳的地方尽情拍砖。
zookeeper是什么?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
目前zookeeper被应用于hadoop/hbase中进行节点的管理,通过zookeeper你可以很方便的开发出一些分布式控制的工具,比如分布式lock, barrier,coun ...
背景
继续前面的zookeeper学习的专题,这次主要是结合项目中遇到的一些问题,进一步学习了下zookeeper的一些内部机制。
针对以下几个问题:
1. zk是否可以保证watcher事件不丢失?
2. zk的EPHEMERAL节点的自动过期时间?
3. zk的如何保证节点数据不丢失?
如果你已经非常清楚这以上的几个问题,看官们可以不用往下看了。
persit机制
zookeeper中的persit机制主要是通过本地disk进行持久化,在本地disk上会有个memory数据对象保持同步。
持久化实现:
ZKDatabase
DataTree ...
背景
这两天在做数据同步项目的联调,测试过程中发现针对mysql的一些使用上存在一些问题,比如batch不起效果,编码问题,预编译失效等等。 这里总结一下,做一下记录,希望对遇到类似问题的有所帮助
内容
编码问题
官方文档: http://dev.mysql.com/doc/refman/4.1/en/connector-j-reference-charsets.html
网上针对mysql的中文编码问题,已经有不少文章进行介绍,大概步骤如下:
1. 设置my.cnf中, 设置default-character-set=utf8
2. 创建表时指定编码,create t ...
背景
今天早上,领导给了我一个任务:在老的系统运行中,DBA反馈说获取database TableMeta操作有点慢,让我分析下基于oracle driver驱动是否可以做下优化。由此引出了本文,仅仅做一个记录。
内容
在补充几点背景知识:
1. 老系统介绍
老系统主要负责的业务是做跨机房之间的数据库记录同步,需要获取数据库的table meta信息,进行构造对应的sql。将源数据的columns变化,通过sql方式更新到目标库上。
table meta信息分析时,需要获取table的字段,主键,需要支持视图,同义词等表查询
2. table meta操作原理
...
背景
最近1个多月周末都忙着在练车,准备年前考个驾照。 之前预约了一次模拟机,结果因临时有事没去成。 想再预约,就得排到3个星期之后。 所以无奈写了个自动预约的程序,等着别人取消预约后,模拟进行预约。
过程
整个代码实现起来不复杂,主要是在一些HTTP请求的模拟上,为了图方便直接用了shell脚本语言进行处理,所以功能上会比较简单,不过挺好用的。 至少我已成功预约到了一个周末
代ssn="自己的身份证号"
xm=`urlencode 自己的姓名`
xcjxbh="HJG021"
jd=`urlencode 阶段一`
sjds ...