Streamsets3.21 mysql同步到kudu

部分用法的官方链接:
https://streamsets.com/documentation/datacollector/3.21.x/help/index.html
中文站:
http://streamsets.vip/

streamsets没有内置的mysql驱动包,CDH版本则需要添加外部库,详见:
https://blog.csdn.net/kkHMou/article/details/115319697

一、单表同步

1、测试用表

mysql测试表:
id主键自增,其余字段varchar
在这里插入图片描述
kudu建表:
注:kudu的表字段必须都是存在的,不能和mysql一样设置虚拟自增主键,kudu字段默认大写也都转成小写
我自己使用的是impala-kuku,这里使用HUE界面进行建表
在这里插入图片描述

在这里插入图片描述

2、mysql配置

在这里插入图片描述
注意:mysql的驱动连接后面需要带上字符集设置
…?useUnicode=true&characterEncoding=utf-8
查询SQL:
“SELECT * FROM student WHERE id > ${OFFSET} ORDER BY id ”
streamsets自己会记录offset,单表同步需要根据表中某个不断增长的字段进行同步,固定写法

在这里插入图片描述
在这里插入图片描述

3、kudu配置

在这里插入图片描述
在这里插入图片描述

4、测试运行

在这里插入图片描述
测试运行并不会记录offset,注意如果测试通过将输出端的数据删除再start整个通道就行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
kudu这边数据也进去了,说明通道正常。

5、开启管道

省略

二、实时同步

1、mysql开启binlog

实时同步需要mysql开启binlog服务

vim /etc/my.cnf
追加
server_id=999
log_bin=mysql-bin
binlog_format=ROW

重启mysql使得binlog生效,记住设置的server_id

2、测试用表

基本和上面单表差不多,不赘述了。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注:图中只配置了单表,多表根据下面的配置自行添加测试即可

3、mysql binlog配置

在这里插入图片描述
Initial offset:mysql-bin.000011:158420309
在这里插入图片描述

4、中间流设置

在这里插入图片描述

注:MYSQL数据的TYPE有DELETE、INSERT、UPDATE3种,kudu这里使用UPSERT和DELETE,如果你要用INSERT和UPDATE,那可以在加一条就行,
建议是不用做区分

在这里插入图片描述
固定写法注意DELETE对应的是‘OldData’,IPSERT和UPDATA对应的是“Data”

for(var i = 0; i < records.length; i++) {
  try { 
    var newRecord = sdcFunctions.createRecord(true);
    newRecord.value = records[i].value['OldData'];
    newRecord.value.Type = records[i].value['Type'];
    newRecord.value.Database = records[i].value['Database'];
    newRecord.value.Table = records[i].value['Table'];
    log.info(records[i].value['Type'])
    output.write(newRecord);
  } catch (e) {
    // Send record to error
    error.write(records[i], e);
  }
}

在这里插入图片描述

for(var i = 0; i < records.length; i++) {
  try { 
    var newRecord = sdcFunctions.createRecord(true);
    newRecord.value = records[i].value['Data'];
    newRecord.value.Type = records[i].value['Type'];
    newRecord.value.Database = records[i].value['Database'];
    newRecord.value.Table = records[i].value['Table'];
    log.info(records[i].value['Type'])
    output.write(newRecord);
  } catch (e) {
    // Send record to error
    error.write(records[i], e);
  }
}

5、kudu设置

在这里插入图片描述
delete
在这里插入图片描述
upsert
在这里插入图片描述

6、测试

在这里插入图片描述
测试的时候只会读取10条,读取不到我们新建的表是正常的,在通过stream selector进行过滤时,以此输出来判断我们写的Type、Table、Database等等是否写的有问题

7、开启流

7.1 向mysql测试表写入3条数据

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2 修改mysql一条数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3 删除一条数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、其他

对于开启binlog服务的mysql,streamsets这边只能启用一个MySQL Binary Log,开启了一个,另一个就会停止。
但是,MySQL Binary Log和单表的JDBC Query是可以共存启动的。
可以根据实际的业务场景,对不通类型的表进行不同的处理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值