开发者学堂课程【《实时计算 Flink 版产品入门与实操》:实时计算 Flink 版 pu/uv Demo】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/334/detail/3743
实时计算 Flink 版 pu/uv Demo
内容简介:
1.根据给出的例子创建源端
2.选择具体的实现方案
3.设计 sql 方法
4.运行 sql 作业
5. 将结果写入 holo 中,观察运行过程及效果
APP 计算 pv/uv 场景例子:
如某公司开发了个知识分享类 APP,自媒体作者可以在 APP 中会发布一些新闻、时事评论技术分享等文章,用户可阅读文章并对喜爱的文章点赞,收藏或打赏。
业务的构建涉及到几个端∶
1.app :应用程序,用户访问入口
2后台系统:
自媒体作者︰进行文章管理,文章点赞数,打赏数,打赏金额查看,文章热度趋势等功能
运营人员∶用于平台上内容管理∶
(1)文章内容审核,对有争议文章进行人工审核
(2)违规内容下架
(3)平台指标查看,如平台 uv/pv,热门板块 pvluv , topN 热门文章等。
字段含义解释:
id 数据库自增主键
event_time 事件产生时间
imei 移动设备国际身份码的缩写,暂可用手
device_model 移动设备机型
client_ip 设备 IP 地址
category_id 文章所属类目信息,比如新闻小说等
user_id 用户 id
event_type 事件类型,比如曝光-001,点击-002点赞-003,打赏-004
article_id 文章 id
pay_amount 打赏金额,单位:元
1.创建源端
阿里云上申请的 MySQL 实例
手动插入了八条数据模拟用户访问APP记录
2.实现方案
方案一:
mysql 中数据经过解析放入 kafka 再进行实时计算最后放入 Hologress。
这条方案在 Flink1.11 之前,是不太容易处理的,因为在这之前处理过的数据里面可能会出现新增行或者用户会进行一些修改、删除的操作,而这些数据在kafka和Flink结合段是很难处理的,在 Flink1.11 之后我们就可以处理 Flink 对接 kafka 的链路操作,对 update 或者 delete 的操作进行一些很顺滑的无缝的操作,而不是像这之前需要对 update 或者 delete 在业务上进行特殊处理。
方案二:
mysql 中数据经过解析直接实时计算放入 Hologress
链路中的 kafka 是否一定需要,主要取决于业务。如果你的数据需要暂存日后再使用或者数据要被多方人使用、多个下游使用就需要 kafka,如果你对这个日志不需要回数或者没有太多的下游,可以使用方案二,节省了整个链路。
故这两条方案链路并不是说一定有好坏之分,只是再使用过程选择上有所区别,这次例子的演示会选择方案二。
3.sql 方法
(1)DDL- 构建MySQL-CDC源表
代码就是负责连接数据库的某张表的 binglog,写法上就是在实时计算 Flink—SQL编辑器—DemoDDL 中加入这串代码,这样就通过数据库定义了数据的源头。
(2)DDL—构建blackhole/Hologress目标表
定义数据源头后,接着加入这串代码,效果是把数据放入“黑洞”,暂时性的不处理数据。
Hologress 是 pg 的协议,可以用pg的客户端去访问 hologress。
建好源表和目标表后,现在需要计算逻辑。即将数据写入 blackhole 中,要把四个字段的值计算出来。
Currenttime:要用 CURRENT-TIMESTAMP 函数作为 currenttime。
Hour:把事件发生所属的小时信息认出。
TimestamphourString 方式:
特殊的写了一个 vvp-training 的价包,具体函数代码。
函数的目标是将时间转化成年日时分表。
4.运行作业
创建 SQL 作业,给作业重新命名,输入代码。
在作业列表找到新建的作业点击启动
运行成功后,在作业总览处可以对作业进行简单的查看,也可以查看作业运行时的Flink ui—Ruunning jobs 数据状态。
这就是我们说的先用调试模式将任务先跑起来,证明我们的逻辑和一开始的源端是联系起来的,现在也正在研发新功能能够在使用过程中不仅能够把逻辑和源端调通,也可以将源端和目标端的运行结果展示出来而不实际写入 holo 中。
5.将结果写入 holo
创建新作业,这个作业的核心逻辑和前面是相同的,唯一不一样的是现在我们需要将结果既放入 holopv-uv 中也要放入 blackhole 中,将同样的结果输出两份,最后运行作业并启动,观察运行过程及效果。