赵志浩
Published on 2020-09-01 / 21 Visits
0
0

Canal开发:CanalV2需优化项-20200901

canal优化

1、配置的所有dataSource,默认项目启动时将会全部进行初始化;但是如果存在第三方库被删除等情况,导致jdbc连接不上时,此时canal异常需告警出去。

2、新建dataSource时,jdbcUrl错误导致ds初始化异常,此时异常应外抛给展示层

3、批量ETL时,如果此时SQL映射配置的有问题,或者id主键没有配置等将导致批量etl和binlog增量同步出现问题的场景时,是不是应该在用户录入数据时就给出对应的配置错误的提示。

4、rdb数据同步时,中文存在乱码问题;(通过增加jdbcUrl的format参数即可)

5、数据库连接中,某一个dataSource如果被删除,是否要连带删除所有的表关联数据

6、表映射管理中全量映射时,直接生成SQL语句;就不用用户过多的输入了。(优化)

7、源表配置中,创建新的表映射关系时,存在一个表要映射多个目标表的情况,此时前端页面展示逻辑应该变更、

8、表映射管理配置时,由于存在一表多源的情况,所以此时源表名下拉框展示时,需要去重,只展示一个即可; (已优化)

9、新建表映射管理时,对于SQL合法性的检查,需要增加对多行SQL的支持。

10、ES批量新增,解析到批量binlog进行数据插入时,似乎还是会出现“_id”被当做document进行发送到es的情况

11、用户配置表映射时,对应的SQL关系没有问题,但是没有配置ID,导致也生成最终的yml配置文件了,但是在启动适配器组topic的时候,会初始化RdbAdapter适配器,此时获取所有的yml文件过滤key时,部分yml在进行YmlConfigBinder转换为对象时,将会异常抛错,导致topic没有启动成功,此时则将会出现一连串的问题,且后端异常没有启动成功,但前端还是展示的是启动成功。。所有,两个问题。一、新增后校验最终的yml,反解析为对象测试是否成功,2、启动topic时,状态要有事务性,不能直接修改状态为成功。

12、增加excel批量导入功能,源表配置以及目标表配置,能做批量效果的做一下批量的功能

13、增加界面上搜索的功能,search

14、表映射管理中增加一键生成SQL的功能,无需手写sql,如果是全量字段映射导入的话,一键生成SQL将会简化很多时间;

15、kafka界面线程启动时,新增一个设置 offset的功能,可以直接指定从那个offset处开始消费;还是从当前kafka server中已经记录的已消费的位置进行消费。

16、新增数据源链接时,新增测试按钮(测试联通性后,才可以点击保存)

17、MySql 》 MySql的批量执行,优化;已优化

18、源表配置,数据查询分页;

canal client adapter 实现的功能

直接接入读取kafka中的binlog数据,然后重新做一个client这不是很简单的事情吗,但是,实际上,真的有那么简单吗、

如果要直接接kafka中所吐出来的binglog数据,自己读取kafka来实现client的情况下,会出现的一些问题:

1、直接接入kafka中的消息,来获取每一个表的变更内容,这是很简单的操作,但是如果有场景要实现停止kafka的读取同步,过段时间再重新启动的话,怎么做?;这就涉及到了要实现kafka读线程的动态启停的操作并且对外抛出对应的操作接口。

2、单独接入一个topic的话很简单,但是需要接入10个topic的话呢,而且要动态启停

3、原生的kafka中得到的是直接的full信息,如果要做字段映射的配置关系的话,怎么做?比如,我此时只需要把一个表的,某几个字段,映射到目标表的,某几个字段上,比如,把源表的a字段数据,映射到目标表的b字段上,怎么做?此时就要维护一段对应的映射关系,只是维护一套对应关系就足够了吗?

4、映射关系用来表示a表的a字段,到b表的a字段这个映射,而kafka中拿到的消息则是a表的这个a字段的值,如果维护好对应的映射关系后,直接将kafka中的内容拼接成sql,映射为一个b的insert sql就行了,但是;如果此时映射关系中需要使用到函数呢,比如,我此时并不是直接把a字段给到b表的a字段,而是需要进行函数处理,如:sub(a,5) 只需要把a字段中的前5个数据,剪切后给到b字段,或者count(a),sum(a)等统计后,再给到b字段。此时,这个映射关系中的函数问题?如何处理?

5、canal client不能只是某个库中的表到某个库中的表的映射,也可以是到ES的映射,hbase的映射,同样,也是需要支持上述的映射关系,以及函数处理的,这个怎么办?肯定也是要处理的。

6、如果做主备,一个正在执行的client任务,如果down机,是不是要做主备的任务切换。

7、除了上述,提到的一些问题,还有update的操作,delete的操作,truncate的操作,等是否也要处理。

总结:

现有的canal client解决的问题,或者说接入kafka消息后需要做的工作

1、多kafka topic读线程的接入,kafka读线程的动态启停

2、表字段映射关系配置的维护,以及,表字段映射关系的函数的执行维护

3、得到kafka消息后的,update,insert,delete等的操作的库的同步,canal client除去支持到某一个目标mysql库做同步外,还要支持到es库的同步,hbase库的同步,oracle,sqlserver,ignite等的同步

4、批量的ETL数据同步,以及ETL数据过程中的事务回滚等操作

5、canal client的任务切换,及服务主备功能;

原创声明:作者:赵志浩、个人博客地址:https://zhaozhihao.com

原创声明:笔名:陈咬金、 博客园地址:https://www.cnblogs.com/zh94/


Comment