基于flink cdc技术,在不停机情况下完成新老系统数据迁移解决方案

本文介绍了如何在不停机的情况下,利用Flink CDC技术进行新老系统数据迁移,以解决业务系统改造中用户数据统一的问题。详细讨论了业务场景、统一用户中心数据设计,并给出了官网和APP用户数据同步任务的代码示例。
摘要由CSDN通过智能技术生成

1.业务场景及痛点描述

      当前随着业务发展,由于公司是做海外业务,公司前几年搭建了官网商城,并积累了一定的用户量,然后去年,由于公司发展智能机器人业务,开发了手机APP,供用户控制机器人,也积累了一定的用户,现在公司想要APP端接入商城业务,完成官网商城和APP端用户体系体系打通,建立统一用户中心,并且业务系统接入用户中心的过程中业务系统不能停机,业务不中断。

2. 统一用户中心数据设计

   2.1 官网用户表结构(关键字段展示)
序号字段名字段类型字段含义
1id
2email用户邮箱,可用户登录,可以为空
4user_login用户账号,可用户登录
5....
6....
  2.2  APP端用户表结构(关键字段展示)
序号字段名字段类型字段含义
1id
2email
3app_version
4os
5last_login_time
6......
    2.3 统一用户中心表接口设计(关键字段展示)
序号字段名字段类型字段含义
1id
2gw_user_id
3app_user_id
4user_login
5email
6app_version
7os
8last_login_time
9row_key标识当前行的唯一字段
10......

3. 使用flInk cdc技术,进行数据持续迁移,让业务系统改造完美融合

3.1 创建官网用户数据同步任务,代码如下:
CREATE TABLE gw_user(
	  id bigInt, 
	  user_login STRING, 
	  password STRING, 
	  email STRING, 
	  PRIMARY KEY (id) NOT ENFORCED
) comment '官网用户信息'
 WITH (  
	'connector'='mysql-cdc',
	hostname'='xxx.xx.xxx.xx',
	'port'='xx',
	'username'='xx',
	'password'='xxx',
	'scan.startup.mode'='initial',
	'database-name'='gw',
	'table-name'='user'
);

CREATE TABLE user_center_user (
  user_login STRING, 
  email STRING, 
  password STRING, 
  row_key STRING,
  PRIMARY KEY (row_key) NOT ENFORCED 
) comment 'sink app user'
 WITH ( 
'connector' = 'jdbc',
'url' = 'jdbc:mysql://xx.xx.xx.xx:xxx/user_center?useUnicode=true&characterEncoding=UTF-8',
'driver' = 'com.mysql.cj.jdbc.Driver',
'username' = 'xxx',
'password' = 'xxx',
'table-name' = 'user' 
);

insert into 
    user_center_user
select 
  user_login,
  email,
  password,
  md5(user_login | email | source)
from gw_user;

3.2 创建APP用户数据同步任务,代码如下:
CREATE TABLE app_user(
	  id bigInt, 
	  email STRING, 
	  password STRING, 
	  .....
	  PRIMARY KEY (id) NOT ENFORCED
) comment 'APP用户信息'
 WITH (  
	'connector'='mysql-cdc',
	hostname'='xxx.xx.xxx.xx',
	'port'='xx',
	'username'='xx',
	'password'='xxx',
	'scan.startup.mode'='initial',
	'database-name'='app',
	'table-name'='user'
);


CREATE TABLE user_center_user (
  user_login STRING, 
  email STRING, 
  password STRING, 
  row_key STRING,
  PRIMARY KEY (row_key) NOT ENFORCED 
) comment 'sink app user'
 WITH ( 
'connector' = 'jdbc',
'url' = 'jdbc:mysql://xx.xx.xx.xx:xxx/user_center?useUnicode=true&characterEncoding=UTF-8',
'driver' = 'com.mysql.cj.jdbc.Driver',
'username' = 'xxx',
'password' = 'xxx',
'table-name' = 'user' 
);

insert into 
    user_center_user
select 
  user_login,
  email,
  password,
  md5(user_login | email | source)
from app_user;

 4. 总结

    当前这里只描述了数据同步相关的设计,更多业务处理还是需要各个自己修改适配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yongge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值