一、需求分析及实现思路

1、分层需求

建立数仓目的:增加数据计算的复用性

可以从半成品继续加工而成

从kafka的ODS层(数据一开始就读到了kafka)读用户行为数据和业务数据,并写回到kafka的DWD层

2、各层的职能

3、DWD层数据准备

环境搭建、计算用户行为日志DWD层、计算业务数据DWD层

二、环境搭建

1、在工程中新建模块gmall2021-realtime

common:公共常量

2、引入依赖、log4j配置文件记录日志

三、准备用户行为日志DWD层

日志数据作为ODS层,已经导入到kafka,并分为三类:页面日志、启动日志和曝光日志

将不同日志写入到不同主题中,作为日志的DWD层

其中,页面日志输出到主流、启动日志输出到启动侧输出流、曝光日志输出到曝光侧输出流

1、主要任务

(1)识别新老用户-状态确认

(2)利用侧输出流实现数据拆分

(3)不同流推送到kafka中不同的topic中

2、代码实现

(1)接收kafka数据并进行转换

获取FlinkDataSourceConsumer,并将获取到的topic数据存入json的object

(2)识别新老访客

记录每个 mid 的首次访问日期,每条进入该算子的访问记录

jsonObjDS.keyBy(data -> data.getJSONObject("common").getString("mid"));

首次访问时间不为空,则为老用户,否则为新用户

同时,无首次访问时间,也会将当前访问时间写入首次访问时间

(3)利用侧输出流实现数据拆分

日志数据分为三类:页面日志、启动日志和曝光日志

提取json中的start字段,看是否为空

提取display字段,看是否为空,判断是否是曝光数据

(4)不同流的数据推送到不同topic(分流)

使用工具类获取sink,就可以将ds中的数据传到指定的topic

pageDS.addSink(MyKafkaUtil.getKafkaSink("dwd_page_log"));

运行jar包查看输出效果

四、准备业务数据DWD层

可以使用FlinkCDC采集业务数据的变化(MySQL),将全部数据保存到ODS层的一个topic中

但上述数据既包括事实表,也包括维度表

该功能是从ODS层读取数据,将维度数据保存到HBase,将事实数据写到DWD层

1、主要任务

接收kafka数据,过滤空值

实现动态分流(维度表写入数据库,事实表写入流中,处理后形成宽表),并通过动态配置方案实时感知(MySQL库存储并进行周期性的同步)

对于配置数据初始化和维护管理,使用 FlinkCDC读取配置信息表,将配置流作为广播流与主流进行连接

分好的流保存到对应的表和topic中

2、代码实现

(1)接收数据,过滤空值

获取json中的data字段,接口为空则返回true被过滤掉

(2)根据配置,动态分流【Phoenix中建表】

建立MySQL表table_process和对应的java Bean

来源表、输出类型、输出表/topic、主键字段、输出字段

读取配置表形成广播流

tableProcessDS.broadcast(mapStateDescriptor);

主流和广播流拼接

filterDS.connect(broadcastStream);

自定义TableProcessFunction-判断建表、发送到哪里(tableProcess.getSinkType()))

过滤多余字段,主程序调用上述函数进行分流

(3)分流sink并将维度表保存到HBase(Phoenix)

用单独的 schema,定义HBASE的配置文件

开启 hbase 的 namespace 和 phoenix 的 schema 的映射

phoenix中建表,获取sink并使用Phoenix的方法插入到表中

插入数据并进行测试

(4)分流sink之保存业务数据到kafka topic

获取kafka的topic数据

五、总结

数据分流和状态识别的算子比较

【实时数仓】Day02-DWD、DIM层数据准备:各层职能、行为日志DWD层、业务日志DWD层及分流(Phoenix和HBASE)的更多相关文章

  1. 基于 Kafka 的实时数仓在搜索的实践应用

    一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...

  2. 基于Flink构建全场景实时数仓

    目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...

  3. 实时数仓(二):DWD层-数据处理

    目录 实时数仓(二):DWD层-数据处理 1.数据源 2.用户行为日志 2.1开发环境搭建 1)包结构 2)pom.xml 3)MykafkaUtil.java 4)log4j.properties ...

  4. 【实时数仓】Day00:数据流程、课程内容、框架结构、知识点总结

    一.数据流程 1.离线数仓 2.实时数仓 二.课程内容 1.数据采集层(ODS) 2.DWD层与DIM层数据准备 3.DWM层业务实现 4.DWS层业务实现 5.ClickHouse 6.数据可视化接 ...

  5. 【实时数仓】Day01-数据采集层:数仓分层、实时需求、架构分析、日志数据采集(采集到指定topic和落盘)、业务数据采集(MySQL-kafka)、Nginx反向代理、Maxwell、Canel

    一.数仓分层介绍 1.实时计算与实时数仓 实时计算实时性高,但无中间结果,导致复用性差 实时数仓基于数据仓库,对数据处理规划.分层,目的是提高数据的复用性 2.电商数仓的分层 ODS:原始日志数据和业 ...

  6. (转)用Flink取代Spark Streaming!知乎实时数仓架构演进

    转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就 ...

  7. HBase实战 | 知乎实时数仓架构演进

    https://mp.weixin.qq.com/s/hx-q13QteNvtXRpNsE5Y0A 作者 | 知乎数据工程团队编辑 | VincentAI 前线导读:“数据智能” (Data Inte ...

  8. 美团点评基于 Flink 的实时数仓建设实践

    https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651749037&idx=1&sn=4a448647b3dae5 ...

  9. 基于 Flink 的实时数仓生产实践

    数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战.在智能商业中,数据的结果代表了用户反馈.获取数据的及时性尤为重要.快速获取数据反馈能够帮助公司更快地做出决策,更好地进行 ...

  10. 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

    阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...

随机推荐

  1. 用AR Engine手部骨骼跟踪能力实现虚拟手表试戴

    AR技术的落地应用,推动着电商领域的不断升级,通过增强现实为用户带来了虚拟与现实结合的AR购物体验.如AR试衣.AR试鞋.AR试妆等功能的出现让用户在手机上就能体验产品的佩戴效果,可以让用户更直观.更 ...

  2. [题解] Codeforces 1268 D Invertation in Tournament 结论,兰道定理

    题目 本题需要用到的结论: 一.兰道定理 二.如果\(n\geq4\),那么\(n\)个点的强连通竞赛图存在\(n-1\)个点的强连通子图. 证明: 现在有一个n-1个点的竞赛图(不一定强连通,称其为 ...

  3. HDU1423 Greatest Common Increasing Subsequence (DP优化)

    LIS和LCS的结合. 容易写出方程,复杂度是nm2,但我们可以去掉一层没有必要的枚举,用一个变量val记录前一阶段的最优解,这样优化成nm. 1<=k<j,j增加1,k的上界也增加1,就 ...

  4. 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例

    目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...

  5. JAVA员工名字 年龄 工资 工种

    如题: 下面是我个人的写法 输出部分使用了 格式化输出 有兴趣的朋友可以了解一下: 解决的思路大致为: 创建一个对象数组--> 数组下标为0的数组中张三这个变量对应 String name; 2 ...

  6. bat批处理命令语法总结

    ::1. 关闭回显表示不显示命令本身只显示输出部分 @echo off ::2. 设置变量注意等号间不能有空格 set num=10 ::3. 使用变量 echo %num% ::4. call 调用 ...

  7. 基本的Dos命令 在控制台如何进入某一个文件或者进入不同的盘符

    基本的Dos命令 Windows+R 打开运行小窗口 cmd 进入 D: 切换盘符 dir 查看当前目录下的所有文件 cd 路径,进入某个文件 cd- 返回上一层 cls 清理屏幕 inconfig ...

  8. Vue学习之--------Vue生命周期beforeCreate、created、beforeMount、mounted、beforeDestroy 。。。(图解详细过程)(2022/7/17)

    文章目录 1.Vue生命周期 1.1 概念 1.2 图解 2.钩子函数的用法说明 2.1 beforeCreate()和created()的详细讲述 2.1.1 方法说明 2.1.2 代码实例 2.1 ...

  9. $_SERVER["REQUEST_URI"],在 PHP 众多预定义服务器变量中,$_SERVER["REQUEST_URI"] 算是经常用到的,但是这个变量只有 apache 才支持

    例如访问:http://localhost/index.php?app=lunbo获取到的$_SERVER["REQUEST_URI"]为"/index.php?app= ...

  10. Spring Core rce漏洞分析(CVE-2022-22965)

    漏洞描述: Springmvc框架参数绑定功能,绑定了请求里的参数造成变量注入,攻击者可以实现任意文件写入,漏洞点spring-beans包中. 漏洞编号: CVE-2022-22965 影响范围: ...