实用工具之TIS数据同步
1.安装
安装挺简单的,按照官方的文档进行安装就可以了,但是有问题。
1 | ## 下载 |
1.单机版安装
2.使用
操作起来其实挺简单的,就算没有文档,自己摸索摸索也就可以了,就是创建数据源,然后创建数据库管道
1.创建数据源
这里我就简单的说一下创建starrocks数据源的时候,下面两个地方如何进行填写
loadUrl配置
loadurl中要配置 [‘192.168.1.95:8030’],192.168.1.95为starrock地址,8030为 steamload 的端口号节点描述
节点描述里面要填写 starrocks 的地址:192.168.1.95 。
2.创建数据管道
打开实例页面,点击右侧的添加,选择数据管道,创建读写数据管道,然后进行保存。
3.批量构建
创建了数据源,创建了读写实例,就可以进行批量构建了。只需要在批量构建页面,触发构建就可以了。
3.其他数据同步方案
1.解锁5大应用场景,最新实时同步实现方案分享 Tapdata Cloud
2.基于 Flink SQL CDC 的实时数据同步方案
3.两万字讲全数据实时同步方案(附代码及架构图)(建议收藏)
4.各种开源数据库同步工具汇总 OGG、Canal、otter、DataX、kettle、Porter
5.Flink CDC 实时数据同步详细解析
4.docker-compose方式安装
1 | # 克隆代码,如果没有v,那就是大写的V |
【1】.基于Docker Compose
5.MySQl实时同步
(1)创建数据源
增加两个数据源,一个是读数据,一个是写入数据。
(2)创建实例
创建一个实例,这里没有什么可以注意点地方,就是一步步的往下,把读和写数据库和数据表配置上,还有字段配置上,然后选择创建就可以了。
(3)配置增量引擎
(4)配置flink
通过新增,创建一个flink通道。
(5)配置 source/sink
这里我其实不知道到底什么意思,就是安装了插件,然后全部默认的配置。
问题
(1)虽然看上去配置挺简单的,但是经常会配置错误,配置错误,就要重启下,甚至要重新删除重新配置。
(2)在配置实时同步的时候,最好能先用DataX构建一下,看看能不能进行手动同步。
【1】.TIS中连接Standalone Flink
问题
1.IncompatibleClassChangeError: Method ‘java.lang.String com.qlangtech.tis.datax.IDataxGlobalCfg.getDefaultTemplate()’ must be InterfaceMethodref constant
在创建实例时,选择添加数据管道,显示了上面的错误。
【解决方案】
在3.3.0版本之前,作者说先用1.8的jdk,等待以后更新。
2.Your open file limit is currently 1024.
[解决]
1 | ## 编辑limits.conf文件 |
重启电脑生效。
1.Solr报警告Your open file limit is currently 1024和Your Max Processes Limit is currently 47448的解决方法
2.取消启动solr时提示的file limit和Max Processes Limit 的限制
3.数据库名称不支持中文
数据库名称填入中文的时候,出现了这个问题:必须由小写字母,大写字母,数字、下划线、减号组成
【解决方案】
开发者说:先随便填一个,先保存下来,然后到data目录里 grep -r “” .找一下对应的ds的配置文件,直接进去改掉,然后tis重启一下。比如我保存的实例名称为 zsjm_sqlserver
1 | ## 进入目录 |
4.Writing records to Doris failed , Connection reset
在使用 DataX 工具进行数据导入的时候,也不是DataX工具,是一个叫TIS的数据导入工具,版本:tis-uber-3.5.0 ,这里面集成了DataX。在导入数据的时候出现了这个问题,导入不到starrocks2.3.0中,以前没有找个问题:“ 往您配置的写入表中写入数据时失败. java.lang.RuntimeException: Writing records to Doris failed ”
作者给出的答案是:以前用的是doris进行数据导入,以后可能需要单独的开发一个starrocks的插件了。听到这个,我就爱莫能助了,毕竟我也处理不了了。
1.https://doris.apache.org/docs/dev/faq/data-faq/
2.starrocks 【2.3】版本 streamload每次导入fe都报Connection reset by peer警告?
3.Caused by: java.io.IOException: java.io.IOException: Failed to flush data to doris.
5.Public Key Retrieval is not allowed
因为我是使用的 8.0 的数据库,所以连接的时候,但是tis支持5.7的数据库。大部分的文章都是 客户端的驱动连接参数中增加:allowPublicKeyRetrieval=true&useSSL=false,但是因为Tis的连接参数,我无法修改,只能换一个方案了。
【解决方案】
1 | # 登陆 |
【1】.Cannot create PoolableConnectionFactory (Public Key Retrieval is not allowed)
【2】.MySQL 8.0 Public Key Retrieval is not allowed 错误的原因及解决方法 方式一:客户端的驱动连接参数中增加:allowPublicKeyRetrieval=true&useSSL=false。方式二:之前我在修改mysql的root用户的时候直接使用的语句是:alter user ‘root’@’localhost’ identified by ‘xxx’; 所以mysql默认使用sha_256加密了。现在修改mysql账号的密码,使用其他的加密方式,直接修改账号密码:ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘xxx’;
【3】.MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法 但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启
【4】.MySQL8 提示Public Key Retrieval is not allowed错误解决方法
6.创建了实例,但是实例列表里面没有
4.0.0版本,我提交了issues.
7.服务端获取不到该Job状态信息,可能是因为Flink-Cluster重启导致
我已经成功创建了一个 flink-cdc 实例,可以实现数据实时同步,但是当我创建第二个同步实例的时候,总是不成功,尝试了很多次,都不行,报错:服务端获取不到该Job状态信息,可能是因为Flink-Cluster重启导致,请手动恢复。我多次删除增量实例,重新创建,一次也不成功。
【解决方案】
因为我用 docker compose 安装的,所以需要修改 flink 比较麻烦
1 | # 进入 |
【1】.Could not acquire the minimum required resources
【2】.配置参数 # 这是作者给的解决方案。
【3】.进入docker容器的四种方法
【4】.docker-compose 文件路径映射 下面是一个简单的例子,演示了如何在 docker-compose.yml 文件中设置路径映射
【5】.docker cp: 从容器中复制文件到本地
8.flink经常挂掉
我遇到的问题就是,创建了实时通道之后,开始是好的,后来同步同步之后,就不行了。实时同步运行一段时间后挂掉 。查看日志:The last packet sent successfully to the server was 63,622,446 milliseconds ago. is longer than the server configured value of ‘wait_timeout’. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property ‘autoReconnect=true’ to avoid this problem.
mysql连接闲置时间超过配置的:wait_timeout,但是连接池还去用那个连接,所以就报连接已经过时
1 | ---- 查看超时设置 |
【尝试方案】
(1)作者给出的答案就是在数据源那里,增加一个附加参数:autoReconnect=true。但是我配置了这个参数,在读写的数据源上都配置了,但是最后还是无法生效,超过一天没有数据同步,那么就无法同步了。
(2)尝试在数据源管理里面,增加了附加参数:autoReconnect=true&timeBetweenEvictionRunsMillis=26400&testWhileIdle=true&validationQuery=SELECT 1,因为这个转义符的问题,还是无法通过校验配置。
(3)尝试找到数据库的配置文件 /usr/local/tis/docker-compose/data/cfg_repo/tis_plugin_config/db 目录,里面有各个数据库的配置文件,修改其中的xml,修改其中的 extraParams 参数,然后重启 tis,结果也是报错了:XmlPullParserException: entity reference name can not contain character =’ (position: START_TAG seen
1 | autoReconnect=true&timeBetweenEvictionRunsMillis=26400&testWhileIdle=true&validationQuery=SELECT%201 |
【1】.mysql: using the Connector/J connection property ‘autoReconnect=true‘ to avoid this problem 1.修改 wait_timeout 的值大一些,一般不这么做,这里记录下来修改命令.2.修改my.cnf.3.设置autoConnect 为 true,不过该方案只对4之前的版本有效。4.依赖于连接池,我用的是:druid,yml中配置参数:test-on-borrow: true , 用的时候先检查
【2】.关于MySQL的wait_timeout连接超时问题报错解决方案 MySQL连接时,服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。connections如果空闲超过8小时,Mysql将其断开,而DBCP连接池并不知道该connection已经失效,如果这时有Client请求connection,DBCP将该失效的Connection提供给Client,将会造成异常。解决方案:1.增加 MySQL 的 wait_timeout 属性的值(不推荐)。2.减少连接池内连接的生存周期。3.定期使用连接池内的连接,附上dbcp和c3p0的标准配置。
【3】.解决dbcp连接Mysql数据库wait_timeout连接超时报错的问题 一是增加MySQL的’wait_timeout’时长;二是保证连接在MySQL的’wait_timeout’时间内,至少访问一次数据库。该方法实现也很简单,只需配置dbcp的三个配置项timeBetweenEvictionRunsMillis、testWhileIdle与validationQuery即可。
【4】.JDBC连接池的testQuery/validationQuery设置
【5】.Application.xml在配置jdbcUrl时的转义字符问题