阿里云——数据传输服务DTS——数据订阅(旧版)监听到的数据解析

项目用到了阿里云的数据传输服务DTS,主要是数据监听。

参考文档:https://help.aliyun.com/document_detail/26647.html?spm=a2c4g.11186623.2.19.100e6099zLpsGv

用了一段时间,也踩了一些坑,现在做个总结。

数据过滤

DTS读取的是数据库的binlog文件,每秒一次,获取到的数据量是非常庞大的,但是这些数据并不都是我们需要的,尤其是心跳数据,如果不过滤的话,日志文件很快就爆炸。

过滤的方式很简单,只要增加一个判断语句即可。

"INSERT".equals(message.getRecord().getOpt().toString())

DTS的sdk提供为我们提供了以下过滤选项:

INSERT、UPDATE、DELETE、REPLACE、HEARTBEAT、CONSISTENCY_TEST、BEGIN、COMMIT、DDL、ROLLBACK、DML、UNKNOWN;

汉字编码

数据库设计的编码格式是utf8mb4,但是sdk默认数据的是utf8格式,输出的汉字乱码,需要转换。

 for (DataMessage.Record.Field field:fieldList) {
      String record = field.encoding;
      String vlaue = "";
      if (record.equals("utf8mb4")){
          vlaue= field.getValue().toString("utf8mb4");
      }else if (record.equals("utf8")){
          vlaue= field.getValue().toString("utf8");
      }else {
          vlaue= field.getValue().toString();
      }
      String type = field.getType().toString();
      String name = field.getFieldname();
      System.out.println("===========字段名:"+name+",字段类型:"+type+",字段编码:"+record+",字段数据:"+vlaue);
                                }

数据重复

DTS智能保证监听到的数据不丢失,但是不能保证不重复,需要自己进行判断。

每次消费数据后都保存消费位点数据。

String checkPoint  = message.getRecord().getCheckpoint();

消费新的数据前与之前的消费位点进行比对。

 public boolean equleCheckPoint(String checkPointOld,Stri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值