用 PolarDB - X + Flink 搭建实时数据大屏|学习笔记(二)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 快速学习用 PolarDB - X + Flink 搭建实时数据大屏

开发者学堂课程【用 PolarDB-X+Flink 搭建实时数据大屏用 PolarDB - X + Flink 搭建实时数据大屏】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/988/detail/14931


可以看到 mySQL 也有 accounts 这张表,来看一下里面数据的情况使用 select*from accounts order by id 命令,里面也是有100条数据,使用select sum(balance) fromaccounts命令来看一下他们拥有的总的钱数,也是10万,可能大家没有注意到这里面神奇的地方通常我们所知道的Binlog工具都不是基于show的,都是一条一条基于行景同步的,也就是说例如现在做一个转账测试,A账户减了10块,B账户加了10块,那么就会对应两个操作,一个将一条记录做减十,一个将另外一条记录做驾驶,在Binlog同步的过程当中就会将它当成两个事情可能会看到一个中间态,可能先看到减10+10还没有同步过来,如果在这个情况下做查看总体余额可能不是刚刚好是10万,在PolarDB - X里面的Binlog是可以保证事物的原子性的,mySQL在做Binlog同步时也是基于事务来同步的,这样就会把事务一个一个完整的同步过来,所以不管在同步的任何时间点去做总余额的查询,始终可以保证余额是10万的,这是Binlog的一个特点,已经做了一段时间的转账测试,下面就将转账测试点掉,点掉之后再来看PolarDB - X,首先总的余额还是10万,看一下里面数据的情况,里面数据已经不变化了。

image.png

最后几条是这样一个数据,99账号对应的余额是997,来看一下mySQL这边是怎样的情况,这边99账号对应的余额也是997,为了对比两边的数据是否完全一致,提前写好了一个命令,这个命令就是将里面所有的数据做一个md 5计算,首先比较的一点是两边数据是否完全一致,首先在PolarDB - X这边执行C口,执行C口比较简单就是将所有数据的ID账户余额做一个拼接,先排序然后在拼接再计算md 5,md5字符串然后计算出md 5的值,只有两边的数据是完全一致的理论上算出来的md 5的值应该是一致的,在PolarDB - X中算出来的md 5值是这样的。

E881开头的以7a75结尾,再来看一下mySQ里面的情况,可以看到也是E881开头的以7a75结尾,表明同步链路是正常工作的,源端这边没有变更之后稍微过一点时间目标mySQL这边就把所有的增量全部的同步了,大家来看一下

image.png

在原端还有另外一个事情,accounts这张表其实是PolarDB - X里面分布式的表,里边会有一个dbpartition by hash是一个分表,在mySQL这边就是正常的一张表

image.png

可以看到在mySQL这边也是通过准备同步,把ddl同步过来,也就意味着全局Binlog里会将分布式的一些特性给处理好,保证下游可以把它当做mySQL的语法,以上便是第一个demo,也就是用PolarDB - X为主,mySQL为备用mySQL原生的Change master指令搭建PolarDB - X到mySQL主备同步的链路

5.PolarDB - X+Flink+Vue

接下来来看第二个例子,也就是用PolarDB - X+Flink+Vue来做一个双十一的交易大屏,稍微再看一下整个数据的链路,因为涉及到主件比较多。

image.png

第一个是在业务端,会有一个模拟线上交易的一段代码来写PolarDB - X数据,PolarDB - X作为交易的主库,之后会通过Binlog增量的日志同步到flink,flink计算之后把结果取到db,db用的是PolarDB - X会把它再写到PolarDB - X里面,之后有一个专门的交易大屏,应用分前端和后端,前端是用Vue,后端使用spring boot,Spring boot中写了一个小的应用来读数据库里面知识,现在就按照数据读的顺序,将这个系统一步一步搭建起来。

首先将刚才的例子改掉,mySQL就不管了,这里会有一个transfer test库,清掉它,这样有了一个干净的环境,接下来在PolarDB - X里面创建业务的一些库表,这次模拟的是一个电商的服务器,电商系统的表结构来自于flink CDC官方的一个教程,flink CDC在getting started快速上手的教程里面,第一篇讲的就是用flink cdc搭建一个mySQL和postgres的streaming ETL,最后通过flink cdc到ECS的一个有计算的链路,此节课就借鉴了这样的数据流的过程,其中原端将mySQL+opg PolarDB - X,目标端也将它换成了PolarDB - X,中间原模原样的使用flink cdc,在办公教程里面会让我们创建若干张表,首先用户的库叫my DB,第一张是商品的表,叫product,里面会有ID,名字还有一些商品的描述,会向里面插入一些初始商品的条目,- MySOL

CREATE DATABASE mydb ;

USE mydb ;

CREATE TABLE profucts (

id INTEGER NOT NULL AUTO _ INCREMENT PRINARY KEY , name VARCHAR (255) NOT NULL ,

description VARCHAR (512) ALTER TABLE products AUTO _ INCREMENT =101;

INSERT INTO products

VALUES

( default ,“ scooter ","Snal12-wheel scooter "),

( default ," car battery ","12V car battery "),

( default ,"12-pack drill bits ","12-pack of drill bits with sizes ranging from #4E( default ," harner ","12oz carpenter ' s hamner '),

( default ," hamner ","140z carpenter ' s hamner '),

( default ," hanner ”,“16oz carpenter ' s haner "),

( default ," rocks "," box of a5sorted rocks "),

( default ," jacket ”,“ water resistent black wind breaker '),

( default ,“ spare tire ","24 inch spare tire ");

第二个是订单表orders,会有订单的ID订单时间购买者的名字价格商品的ID还有商品目前的状态订单的状态等等,

CREATE TABLE orders (

order _ id INTEGER NOT NULL AUTO _ INCRENENT PRIMARY KEY , order _ date DATETIHE NOT NULL ,

custorer _ nane VARCHAR (255) NOT NULL , price DECIMAL (10,5) NOT NULL ,

produet _ id INTEGER NOT NULL ,

order _ status B00LEAN NOT NULL 一 Whether order has been placed AUTO _ INCREMENT =10001;

INSERT INTO orders

VALUES ( default ,"2020-07-3010:08:22," Jark ",50.50,102, false ),

2020-87-3010:11:09,‘ Sally ",15.00,105, false ),

'2020-87-3012:08:30",' Edward ',25.25,186, fatse );

( default ,

( default ,

第三个表示快递的情况,主要是有三张表一张是商品,一张是订单,一张是物流的信息这三张表,今天的演示为了简便起见只关注订单这一张表

PG

CREATE TABLE shiprents (

shipment _ id stRIAL NOT NULL PRIMARY KEY , order _ id SERIAL NOT NULL ,

origin VARCHAR (255) NOT NULL ,

destination VARCHAR (255) NOT NULL , is _ arrived B00LEAN NOT NULL

ALTER SEQUENCE public . shipnents _ shipment _ id _ seq RESTART WITH 1001; ALTER TABLE public . shipments REPLICA IDENTITY FULL ;

INSERT INTO shipments

VALUES ( default ,10001,"Be11ing", Shanghai ", false ),

( default ,10002," Hangzhou ',' Shanghai ', false ),

( default ,10003," Shanghai ',' Hangzhou ', false );

接下来开始去构建这些表,首先在PolarDB - X里面创建业务的db叫做mydb,mydb创建好以后首先在PolarDB - X里面创建商品这张表,商品表创建以后,向里面插入几条初始的商品

NINSERT INTO products

VALUES

( default ," scoater "," Small 2-vheelsco0ter"),

( default ," car battery ","12V car battery "),

( default ,"12-packdril1 bits ","12-pack of drill bits with sizes ranging ( default ," hammer ","120z carpenter ' s hamer '),

( default ,“ hammer "“140z carpenter ' s hammer "'),( default ," hammer ","160z carpenter ' s hammer ''),( default ," rocks "," box of assorted rocks "),

( default ," jacket "," water resistent black w1nd breaker "),( default ," spare tire ",“24 inch spare tire ";

f rom #40 to #3"》,

看一下

image.png

这张表已经存在了,看一下这张表里面的数据

image.png

里面有九条商品的记录,第二步,创建订单表,创建以后,里面会有几条初始的数据,也需要创建一下

INSERT INTO orders

VALUES

S ( default ,‘2020-07-3010:08:22',‘ Jark ',50.50,102, false ),( default ,2020-07-3010:11:09'," Sally ',15,00,105, false ),( default ,‘2020-07-3012:00:30',‘ Edward ',25.25,106, false );

第三个是物流的表,同样需要创建。

创建好以后可以看到现在业务库里面已经有三张表,商品,订单以及物流,有了初始信息以后,,接下来开始启动flink,Flink中有几个包需要下载,一个是他本身,第二个是它里面的一些connect,连接mySQL的connect以及连接ddc的connect,这些比较大所以已经提前下好放在这里了,接下来需要启动flink,flink本身有dashboard的web界面,为了方便将dashboard端口转化到本地,稍后可以通过浏览器进行观看状态,将端口转化之后

image.png

可以看到这就是flink本身dashboard的页面,目就可以了前本身flink是没有启动的,现在将flink启动起来,启动比较简单,调用bin目录下有个start cluster

image.png

可以看到有一个任务叫stots,这个启动好以后就启动flink cdc客户端,C口client,下面进行配置,将PolarDB - X里面的三张表在flink里面分别建立一个对应关系,因为今天只关心订单这张表,所以在flink中只建一张orders,其他两张表不进行建立。

首先改一下flink参数,在flink中也创建一下订单表

image.png

大家可以看一下建表的语句,创建一张表叫做orders,里面有多少个列,分别叫什么以及列的类型,与前面的PolarDB - X是对应起来的,在这里会进行一个数据源的配置,第一个是connector,用的是mySQL cdc,这里大家要注意,这边使用的是mySQLcdc,也就是说flink cdc会直接将PolarDB - X当成mySQL来对待,第二个是一些连接的信息,例如IP是什么?用户名是什么?端口是什么?密码是什么?然后让你连接库,表,是mydb库,orders表,建好以后看一下flink是否与PolarDB - X能正常的通信,执行select*from orders语句,将PolarDB - X 里面order这张表的数据拉到flink中,看一下能不能正常的获取。

image.png

可以看到flink已经可以正常拿到PolarDB - X里面的三条orders数据,说明链路已经打通了,现在flink  cdc已经完全把PolarDB - X当成mySQL来对待,也正确的拿到了里面的数据,接下来开始处理有计算的部分,有了交易表,交易大屏里面我们最关心的有两个值,第一个值叫做当前总的交易额是多少,第二个值是当前总订单的数量有多少,可以简单想象一下这两个数据是容易从orders里面获取的,第一个是创的新的orders里面有多少记录,就是订单数量,第二个可以sum一下price,把所有订单里面的price加起来,就是总的交易额,所以这是一个非常简单的场景,在真实的阿里巴巴双十一交易大屏里面会有非常多的丰富的数据进行展示,后台获取数据的源比较多,计算也非常的复杂,这里仅仅是为了演示链路,所以把这个场景做的简单一些,仅从orders这张表去获取最初的原始的数据,并且进行简单的调用计算,一个是count*,一个是sum,最后将结果存到PolarDB - X里面,现在在回到PolarDB - X里面,将储存结果的db和表先建立,Flink计算结果的库叫做gmv,建好之后存储两个结果,一个是交易总额以及订单总数量,这张表也叫做gmv,首先在PolarDB - X里面建这张表。

相关实践学习
Polardb-x 弹性伸缩实验
本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
相关文章
|
1月前
|
存储 弹性计算 数据可视化
使用PolarDB-X与Flink搭建实时数据大屏
使用PolarDB-X与Flink搭建实时数据大屏
|
3月前
|
SQL 关系型数据库 MySQL
基于 Flink CDC 打造企业级实时数据集成方案
基于 Flink CDC 打造企业级实时数据集成方案
|
3月前
|
存储 消息中间件 Kafka
流式湖仓增强,Hologres + Flink 构建企业级实时数仓
2023 年 12 月,由阿里云主办的实时计算闭门会在北京举行,阿里云实时数仓 Hologres 研发负责人姜伟华现场分享 Hologres+Flink 构建的企业级实时数仓,实现全链路的数据实时计算、实时写入、实时更新、实时查询。
120788 107
流式湖仓增强,Hologres + Flink 构建企业级实时数仓
|
8月前
|
SQL 关系型数据库 MySQL
基于阿里云 Flink+Hologres 搭建实时数仓
本文为您介绍如何通过实时计算 Flink 版和实时数仓 Hologres 搭建实时数仓。
2094 0
基于阿里云 Flink+Hologres 搭建实时数仓
|
3月前
|
存储 消息中间件 Kafka
实时湖仓增强,Hologres + Flink构建企业级实时数仓
本文主要介绍Hologres+Flink构建的企业级实时数仓,实现全链路的数据实时计算、实时写入、实时更新、实时查询。
|
5月前
|
搜索推荐 BI Apache
「Flink+Hologres 搭建实时数仓」训练营重磅开启
Flink+Hologres 搭建实时数仓训练营火热报名中!文末有 Flink Forward Asia 2023 赠票福利~
898 0
「Flink+Hologres 搭建实时数仓」训练营重磅开启
|
11月前
《阿里云产品手册2022-2023 版》——实时数仓Hologres
《阿里云产品手册2022-2023 版》——实时数仓Hologres
115 0
|
SQL 数据可视化 关系型数据库
实践教程之使用PolarDB-X与Flink搭建实时数据大屏
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。 本期实验将指导您使用 PolarDB-X 与Flink搭建实时数据大屏。
实践教程之使用PolarDB-X与Flink搭建实时数据大屏
|
流计算
《实时数仓“王炸组合”实时计算Flink版+Hologres》电子版地址
精品的内容促使训练营非常受大家的欢迎,为满足大家求知学习的劲头,我们现将《实时数仓入门训练营》的课程内容全部整理了出来!汇编成《实时数仓“王炸组合”-实时计算Flink版+Hologres》的合集电子书!供各位小伙伴学习参考,免费下载!
413 0
《实时数仓“王炸组合”实时计算Flink版+Hologres》电子版地址
|
前端开发 数据可视化 关系型数据库
用 PolarDB - X + Flink 搭建实时数据大屏|学习笔记(三)
快速学习用 PolarDB - X + Flink 搭建实时数据大屏
344 0
用 PolarDB - X + Flink 搭建实时数据大屏|学习笔记(三)