实用工具之TIS数据同步

标签: 无 分类: 未分类 创建时间:2022-01-06 14:28:50 更新时间:2024-11-23 10:24:25

1.安装

安装挺简单的,按照官方的文档进行安装就可以了,但是有问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 下载
wget http://mirror.qlangtech.com/3.4.0/tis/tis-uber.tar.gz

## 解压
tar xvf tis-uber.tar.gz -C ./

## 进入目录
cd tis-uber

## 启动
./bin/tis start
## 重新启动
./bin/tis restart
## 停止
./bin/tis stop

## 浏览器打开 http://localhost:8080
参考文章:
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.其他数据同步方案

4.docker-compose方式安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 克隆代码,如果没有v,那就是大写的V
git clone git@github.com:datavane/tis.git -b V4.0.0

# 修改配置文件,持久化数据库,数据库文件:https://github.com/qlangtech/tis-ansible/blob/v4.0.0/tis_console_mysql.sql
vi docker-compose/config/config.properties

# 修改端口,修改了flink端口:9081,web端口:10002,这里有一点需要注意,就是这个数据库的url,不能是127.0.0.1,我尝试过很多次,最后都是无效的。
vi docker-compose.yaml

# 启动
cd ./docker-compose
docker compose -f docker-compose.yaml up -d
# 关闭
docker compose -f docker-compose.yaml down

# 查看是否启动
docker-compose -f docker-compose.yaml ps

# 数据初始化
http://192.168.1.8:10002
参考文章:
【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
2
3
4
5
6
7
## 编辑limits.conf文件
sudo vim /etc/security/limits.conf
## 增加下面四行
* hard nofile 65535
* soft nofile 65535
* hard nproc 65535
* soft nproc 65535

重启电脑生效。


3.数据库名称不支持中文

数据库名称填入中文的时候,出现了这个问题:必须由小写字母,大写字母,数字、下划线、减号组成

【解决方案】
开发者说:先随便填一个,先保存下来,然后到data目录里 grep -r “” .找一下对应的ds的配置文件,直接进去改掉,然后tis重启一下。比如我保存的实例名称为 zsjm_sqlserver

1
2
3
4
5
6
7
8
9
10
## 进入目录
cd data
## 在文件中查找
grep -r "zsjm_sqlserver" .
## 显示文件
./cfg_repo/tis_plugin_config/db/zsjm_sqlserver/com.qlangtech.tis.plugin.ds.DataSourceFactory.xml:
## 打开文件,修改其中的 <dbName>PhEMS_zsjm</dbName> 配置,改为中文

## 重新启动,就可以看到数据库的名称已经改变了。
./bin/tis restart

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的插件了。听到这个,我就爱莫能助了,毕竟我也处理不了了。

5.Public Key Retrieval is not allowed

因为我是使用的 8.0 的数据库,所以连接的时候,但是tis支持5.7的数据库。大部分的文章都是 客户端的驱动连接参数中增加:allowPublicKeyRetrieval=true&useSSL=false,但是因为Tis的连接参数,我无法修改,只能换一个方案了。

【解决方案】

1
2
3
4
5
6
7
8
9
10
# 登陆
mysql -u root -p
# 使用传统密码方式创建用户
mysql> CREATE USER 'tis'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';

# 赋予 tis_console 全部权限
mysql> GRANT ALL ON tis_console.* TO tis;

## 刷新权限
flush privileges;
参考文章:
【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.

我已经成功创建了一个 flink-cdc 实例,可以实现数据实时同步,但是当我创建第二个同步实例的时候,总是不成功,尝试了很多次,都不行,报错:服务端获取不到该Job状态信息,可能是因为Flink-Cluster重启导致,请手动恢复。我多次删除增量实例,重新创建,一次也不成功。

【解决方案】
因为我用 docker compose 安装的,所以需要修改 flink 比较麻烦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 进入
cd /usr/local/tis/docker-compose
# 查看 flink 容器
docker ps
# 拷贝文件
docker cp 96e2b782084:/opt/flink/conf/flink-conf.yaml ./config/flink-conf.yaml

# 编辑 flink-conf.yml
vi config/flink-conf.yaml
# 修改
taskmanager.numberOfTaskSlots: 10

# 编辑 docker-compose.yml
vi docker-compose.yaml

# 增加文件映射
services:
flink:
image: registry.cn-hangzhou.aliyuncs.com/tis/flink:4.0.0
hostname: flink
mem_limit: 2048m
cpus: '1.0'
ports:
- "9081:8081"
command: ["/bin/bash","-c","./bin/start-cluster.sh && tail -f ./log/flink--standalonesession-0-*.log"]
environment:
- TZ=Asia/Shanghai
depends_on:
- tis-console
# 增加映射
volumes:
- ${PWD}/config/flink-conf.yaml:/opt/flink/conf/flink-conf.yaml

# 关闭
docker compose -f docker-compose.yaml down
# 重启
docker compose -f docker-compose.yaml up -d
参考文章:
【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
2
---- 查看超时设置
show variables like '%timeout%'

【尝试方案】
(1)作者给出的答案就是在数据源那里,增加一个附加参数:autoReconnect=true。但是我配置了这个参数,在读写的数据源上都配置了,但是最后还是无法生效,超过一天没有数据同步,那么就无法同步了。
(2)尝试在数据源管理里面,增加了附加参数:autoReconnect=true&timeBetweenEvictionRunsMillis=26400&testWhileIdle=true&validationQuery=SELECT&nbsp1,因为这个转义符的问题,还是无法通过校验配置。
(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时的转义字符问题
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。