业务数据的变化,我们可以通过 FlinkCDC 采集到,但是 FlinkCDC 是把全部数据统一写入一个 Topic 中, 这些数据包括事实数据,也包含维度数据,这样显然不利于日后的数据处理,所以这个功能是从 Kafka 的业务数据 ODS 层读取数据,经过处理后,将维度数据保存到 HBase,将事实数据写回 Kafka 作为业务数据的 DWD 层

实现动态分流功能

由于 FlinkCDC 是把全部数据统一写入一个 Topic 中, 这样显然不利于日后的数据处理。所以需要把各个表拆开处理。但是由于每个表有不同的特点,有些表是维度表,有些表是事实表。

在实时计算中一般把维度数据写入存储容器,一般是方便通过主键查询的数据库比如HBase,Redis,MySQL 等。一般把事实数据写入流中,进行进一步处理,最终形成宽表。

维度数据不放 Redis 的原因:User 用户维度数据量很大,其它维度还行。

为什么不放 MySQL: 并发压力大

这样的配置不适合写在配置文件中,因为这样的话,业务端随着需求变化每增加一张表,就要修改配置重启计算程序。所以这里需要一种动态配置方案,把这种配置长期保存起来,一旦配置有变化,实时计算可以自动感知。

这种可以有两个方案实现

  • 一种是用 Zookeeper 存储,通过 Watch 感知数据变化;

  • 另一种是用 mysql 数据库存储,周期性的同步;(有配置表,指定哪些表的数据发给哪些主题)

  • 另一种是用 mysql 数据库存储,使用广播流。

    这里选择第二种方案,主要是 MySQL 对于配置数据初始化和维护管理,使用 FlinkCDC 读取配置信息表,将配置流作为广播流与主流进行连接。

  • 获取执行环境

  • 消费Kafka ods_base_db 主题数据创建流

  • 将每行数据转换为JSON对象并过滤(delete) 主流

  • 使用FlinkCDC消费配置表并处理成 广播流

  • 连接主流和广播流

  • 分流 处理数据 广播流数据,主流数据(根据广播流数据进行处理)

  • 提取Kafka流数据和HBase流数据

  • 将Kafka数据写入Kafka主题,将HBase数据写入Phoenix表

  • 启动任务

table_process

table_process 主健:sourceTable + type
sourceTable 根据表名分流
type 用来区分新增、变更的数据,不同类型的数据放到不同主题表不
sinkType 放Kafka还是其它地方
sinkTable 如果是维度表,就是Phoenix表名,如果是 kafka 就是 主题
sinkColumns 提供字段,为了自动建表
pk Phoenix 建表必须有主健
extend 指定要不要做分区表,等等

Demo

sourceTable type sinkType sinkTable
base_trademark insert hbase dim_xxx(Phoenix 表名)
order_info insert kafka dwd_xxx(主题名)
CREATE TABLE `table_process` (
`source_table` varchar(200) NOT NULL COMMENT '来源表',
`operate_type` varchar(200) NOT NULL COMMENT '操作类型 insert,update,delete',
`sink_type` varchar(200) DEFAULT NULL COMMENT '输出类型 hbase kafka',
`sink_table` varchar(200) DEFAULT NULL COMMENT '输出表(主题)',
`sink_columns` varchar(2000) DEFAULT NULL COMMENT '输出字段',
`sink_pk` varchar(200) DEFAULT NULL COMMENT '主键字段',
`sink_extend` varchar(200) DEFAULT NULL COMMENT '建表扩展',
PRIMARY KEY (`source_table`,`operate_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

1.读取状态2.过滤数据

3.分流

ODS:

  • 数据源:行为数据,业务数据
  • 架构分析:

    FlinkCDC: DataStream/FlinkSOIFlinkCDC/Maxwell/Canal保持数据原貌,不做任何修改! ods_base_log,ods_base_db

DWD-DIM:

行为数据:DWD(Kafka)

1.过滤脏数据 --> 侧输出流 脏数据率

2.新老用户校验 --> 前台校验不准

3.分流 --> 侧输出流 页面、启动、曝光、动作、错误

4.写入Kafka

业务数据:DWD (Kafka)-DIM(Phoenix)

1.过滤数据-->删除数据

2.读取配置表创建广播流

3.连接主流和广播流并处理

1)广播流数据:

  • 解析数据
  • Phoenix 建表(HBase)
  • 写入状态广播

2)主流数据

  • 读取状态
  • 过滤字段
  • 分流(添加 SinkTable 字段)

4.提取Kafka和 HBase 流,分别对应的位置

5.HBase流:自定义 Sink

6.Kafka流:自定义序列化方式

大数据-数据仓库-实时数仓架构分析

大数据-业务数据采集-FlinkCDC

大数据 - DWD&DIM 行为数据

大数据 - DWD&DIM 业务数据

大数据 DWM层 业务实现

大数据 - DWD&DIM 业务数据的更多相关文章

  1. 大数据 - DWM层 业务实现

    DWM 建表,需要看 DWS 需求. DWS 来自维度(访客.商品.地区.关键词),为了出最终的指标 ADS 需求指标 DWT 为什么实时数仓没有DWT,因为它是历史的聚集,累积结果,实时数仓中不需要 ...

  2. 大数据 - DWS层 业务实现

    统计主题 需求指标[ADS] 输出方式 计算来源 来源层级 访客[DWS] pv 可视化大屏 page_log 直接可求 dwd UV(DAU) 可视化大屏 需要用 page_log 过滤去重 dwm ...

  3. DIOCP数据包太大,请在业务层分拆发送

    DIOCP数据包太大,请在业务层分拆发送 DIOCP日志记录异常:数据包太大,请在业务层分拆发送...... 跟踪发现,原因在下图:

  4. 6.Flink实时项目之业务数据分流

    在上一篇文章中,我们已经获取到了业务数据的输出流,分别是dim层维度数据的输出流,及dwd层事实数据的输出流,接下来我们要做的就是把这些输出流分别再流向对应的数据介质中,dim层流向hbase中,dw ...

  5. P2P小贷网站业务数据流程分享

    P2P小贷网站业务数据流程分享 引言 这是去年年底开发的一个项目,完成后和用户的衔接没有很好的做起来,所以项目就搁浅了.9月以来,看各路P2P风声水起,很是热闹:这里分享下我的设计文档,算是抛砖引玉, ...

  6. 后Hadoop时代的大数据技术思考:数据即服务

    1. Hadoop 的神话正在破灭 IBM leads BigInsights for Hadoop out behind barn. Shots heard IBM has announced th ...

  7. SharePoint中使用Visio Service展示业务数据

    SharePoint中可以通过Visio Service可以在浏览器中查看Visio图,功能部署到系统中,一切安好. 而现实总是很折磨人,使用该功能后,相关使用者随后提出,Visio图能否与我的业务数 ...

  8. 杂项:大数据 (巨量数据集合(IT行业术语))

    ylbtech-杂项:大数据 (巨量数据集合(IT行业术语)) 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞 ...

  9. 【生产问题】--8KW的数据表导致业务卡顿

    问题描述:业务突然变得巨卡 分析思路: (1)分析用户请求进程:查看是否有长期运行霸占锁的情况,或者进程数量巨多.很明显我这里就是巨多,正常情况一般0~40来个的样子,在业务使用高峰期居然达到了140 ...

  10. Mysql大概1700W大表删除1000W左右数据,发现数据大小和索引大小并没有减少思考

    MySQL删除操作其实是假删除 因为近期在重构优化一个业务的时候 发现有一张表(send_log)数据量将近1700W 左右  占用数据大小17G,索引18G左右  而我们的核心应用在使用的时候 会去 ...

随机推荐

  1. Java安全机制之一——SecurityManager和AccessController

    前言: 在看socket相关代码的时候,AbstractPlainSocketImpl中的一段代码吸引了我,其实之前见过很多次类似的代码,但一直不想去看,只知道肯定和权限什么的相关,这次既然又碰到了就 ...

  2. 【题解】HD2016.X1,HD2016.X3,HD2016.X4,HD2016.X5

    [HD2016.X1] 价钱统计 题目描述 夏天到了,超市里摆满了各种各样的应季水果.现在知道:西瓜的价钱是每斤 1.2 元:桃子的价钱是每斤 3.5 元:葡萄的价钱是每斤 4.5 元:苹果的价钱是每 ...

  3. [AI]生物本能vs机器人工程:谁才有“意识”?

    [AI]生物本能vs机器人工程:谁才有"意识"? 引子 我们已经就人类意识的初级形式和高级形式进行了初步探讨.通过对比分析,我们将初级意识定义为可以无需高级意识参与的本能反应.而高 ...

  4. iframe嵌入报表滚动条问题

    当在iframe中嵌入报表时,可能会遇到滚动条的问题.下面是一个详细的介绍 1. 了解iframe: - iframe是HTML中的元素,用于在当前页面中嵌入另一个页面. - 嵌入报表时常使用ifra ...

  5. influxdb: unable to parse points 异常解决总结

    转载请注明出处: influxdb 使用过程经常遇到:unable to parse points  的异常:  unable to parse points 是 InfluxDB 抛出的异常,表示无 ...

  6. [Python急救站]文件管理工具

    对于一个程序员,有时候文件太多,忘记放哪里了,那有没有一个可以帮你定位到文件的文件管理工具呢,抱着这样的想法,我做了以下这个代码,可以快速定位找到文件所在位置. import os import tk ...

  7. NestJs系列之使用Vite搭建项目

    介绍 在使用nest创建项目时,默认使用webpack进行打包,有时候启动项目需要1-2分钟.所以希望采用vite进行快速启动项目进行开发. 本文主要使用NestJs.Vite和swc进行配置.文章实 ...

  8. erp——绩效考核系统——数据需求说明书

    绩效考核--数据需求说明书 1.引言 1.1编写目的 数据要求说明书详细的提供了系统中各个数据的流向,是设计数据库的关键所在,为以后的编码以及测试提供一份可靠的依据. 1.2 对象 本<数据要求 ...

  9. ubuntu安装opencv的正确方法

    本文介绍的是如何安装ubuntu下C++接口的opencv 1.安装准备: 1.1安装cmake sudo apt-get install cmake 1.2依赖环境 sudo apt-get ins ...

  10. 24、Go语言中的OOP思想

    1.是什么? OOP:面向对象 Go语言的解构体嵌套 1.模拟集成性:is - a type A struct { field } type B struct { A // 匿名字段 } 这种方式就会 ...