【实时数仓】Day01-数据采集层:数仓分层、实时需求、架构分析、日志数据采集(采集到指定topic和落盘)、业务数据采集(MySQL-kafka)、Nginx反向代理、Maxwell、Canel
一、数仓分层介绍
1、实时计算与实时数仓
实时计算实时性高,但无中间结果,导致复用性差
实时数仓基于数据仓库,对数据处理规划、分层,目的是提高数据的复用性

2、电商数仓的分层
ODS:原始日志数据和业务数据
DWD:以数据对象为单位进行分流,如订单、页面访问等
DIM:维度数据
DWM:数据对象进一步加工,形成宽表&明细数据【明细宽表】
DWS:根据主题对数据聚合,形成主题宽表【主题宽表】
ADS:将CLickHouse中的数据根据需求进行筛选聚合
二、实时需求概览
1、离线计算与实时计算
离线计算:根据确定范围的数据进行一次性计算【如根据前一日的数据生成报表/年度账单】
实时计算:序列化方式输入,所查当下给出结果,对当日数据的实时监控,需求简单、指标少,但注重实时性
2、实时需求种类
日常统计报表
实时数据大屏监控【双十一大促】
数据预警或提示【非法欺诈类操作,或检测用户行为从而进行跟进】
实时推荐【根据自身属性/用户行为,进行可能喜欢的内容推荐】
三、统计架构分析
1、离线架构
业务数据-MySQL-sqoop-hdfs-hive-MySQL-可视化
前端埋点日志数据-logfile-flume-kafka-flume-hdfs-MySQL-可视化
2、实时架构
业务数据-MySQL-Canal/Maxwell/FlinkCDC导入变更-kafka-flink-
前端埋点数据-kafka-flink
根据不同需求商业智能(Business Intelligence)/数据可视化调用,存入不同的库中,并将维度表和状态存入HBASE、redis中

埋点用户行为数据:用户在使用产品过程中,与客户端产品交互过程中产生的数据,比如页面浏览、点击、停留、评论、点赞、收藏等
业务交互数据:业务流程中产生的登录、订单、用户、商品、支付等相关的数据,通常存储在DB中,包括MySQL、Oracle等。
四、日志数据采集
1、日志生成器
使用生成数据的jar包,并将日志发送至指定的端口
需要学习如何从指定端口接受数据并进行处理(which software)

配置发送端口及生成数据的日期
2、日志采集模块测试
(1)spring boot
无需配置xml,使用默认配置
特别配置只需要修改application.properties(application.yml)
(2)搭建采集数据的模块-gmall-logger
安装lombok插件
创建父工程gmall2021,工程中管理多个模块
新建日志采集模块,并切换脚手架地址为https://start.aliyun.com

选择开发工具、消息的依赖

编写LoggerController:@RestController = @Controller+@ResponseBody、@RequestMapping("test2")、@RequestParam("name") String name
@RestController //表示返回普通对象而不是页面
调用路径返回数据打印到页面
(3)spring boot整合kafka
修改工程端口、kafka的地址
LoggerController添加注解@Slf4j和方法getLogger,实现日志落盘&发送对应主题到kafka【两个方法】
Resources 中添加 logback.xml 配置文件,设置某个包的日志单独打印
application.yml 配置中设置日志发送的方式http和地址,以及业务的日期
3、日志采集-打包单机部署
修改logback配置的打印目录为自身路径
打包、上传、启动消费者测试
4、打包集群部署,Nginx反向代理
同步日志采集的jar包:xsync gmall-flink
启动Nginx
运行消费者、运行采集数据的jar、运行生成数据的jar
五、业务数据库数据采集
1、FlinkCDC入门
2、MySQL准备
修改/etc/my.cnf 文件,设置binlog格式为row,指定要同步的数据库为所需的数据库【使用FlinkCDC同步MySQL的数据】
重启MySQL:sudo systemctl restart mysqld
修改配置中的数据库连接信息spring.datasource.url,运行jar包生成数据
3、环境搭建
创建包结构

4、代码实现
将流数据推送到topic中【生产者】
消费MySQL变化数据并将其写入kafka【flinkCDC】
六、Nginx
1、正向代理与反向代理
多对一、一对多
2、应用
静态部署(web网站)、负载均衡、静态代理(资源)、动静分离

3、安装启动
4、负载均衡配置
七、Maxwell
实时读取MySQL 二进制日志 Binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka
1、工作原理
(1)MySQL 主从复制过程

(2)Maxwell 的工作原理
把自己伪装成 slave,假装从 master 复制数据
(3)MySQL 的 binlog(二进制日志)
使用场景:数据恢复、主从数据保持一致
开启:Linux和Windows的文件不同my.cnf my.ini
分类:STATEMENT(语句级,可能产生数据不一致的情况,如update tt set create_date=now()),MIXED(statement的升级版,特殊情况采用行级处理方式),ROW(行级,记录每行数据的变化)
Maxwell适合选用行级日志
2、安装、初始化元数据库
3、使用 Maxwell 监控抓取 MySQL 数据
拷贝并修改配置(输出到指定topic)
编写启动脚本,并启动消费端
八、Canel搭建教程
1、入门
(1)概念
用 java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件
利用 Canal Client 来处理获得的相关数据
(2)应用场景
原始场景:阿里中间件的一部分
更新缓存到服务器
抓取变化表来制作拉链表
新增变化数据制作实时统计
(3)工作原理
主从复制原理:写到二进制日志(Binary log)
canle原理:把自己伪装成 Slave,假装从 Master 复制数据
(4)MySQL的binlog
2、架构以及安装
(1)架构

(2)单机版
修改配置,改为输出到kafka
实例配置修改
2、 canal 高可用
实现高可用,而不是负载均衡
配置 zookeeper
避免发送重复数据
3、Maxwell与Canal工具对比
Maxwell 没有 Canal 那种 server+client 模式,只有一个 server 把数据发送到消息队列或 redis。
Canal 只能抓取最新数据,对已存在的历史数据没有办法处理,Maxwell有一个bootstrap,可以导出完整的历史数据
Maxwell 不能直接支持 HA,但是它支持断点还原
Maxwell 只支持 json 格式,而 Canal可以自定义格式
Maxwell 比 Canal 更加轻量级
数据格式对比
【实时数仓】Day01-数据采集层:数仓分层、实时需求、架构分析、日志数据采集(采集到指定topic和落盘)、业务数据采集(MySQL-kafka)、Nginx反向代理、Maxwell、Canel的更多相关文章
- Linux下nginx反向代理服务器安装与配置实操
1.我们只要实现访问nginx服务器能跳转到不同的服务器即可,我本地测试是这样的, 在nginx服务器里面搭建了2个tomcat,2个tomcat端口分别是8080和8081,当我输入我nginx服务 ...
- 数仓建设中最常用模型--Kimball维度建模详解
数仓建模首推书籍<数据仓库工具箱:维度建模权威指南>,本篇文章参考此书而作.文章首发公众号:五分钟学大数据,公众号中发送"维度建模"即可获取此书籍第三版电子书 先来介绍 ...
- 数仓建模—ID Mapping
早晨起床的时候,发现自己尿分叉,我没有多想,简单洗洗就匆忙出门.路过早餐店,我看到师傅熟练的拉扯一小块面团,拉至细长条,然后放入油锅中,不一会功夫,一根屎黄色的油条便出锅了,卖相不错.我在想,小到炸屎 ...
- 数仓建模—OneID
今天是我在上海租房的小区被封的第三天,由于我的大意,没有屯吃的,外卖今天完全点不到了,中午的时候我找到了一包快过期的肉松饼,才补充了1000焦耳的能量.但是中午去做核酸的时候,我感觉走路有点不稳,我看 ...
- 数仓建模—建模工具PdMan(CHINER)介绍
数据仓库系列文章(持续更新) 数仓架构发展史 数仓建模方法论 数仓建模分层理论 数仓建模-宽表的设计 数仓建模-指标体系 数据仓库之拉链表 数仓-数据集成 数仓-数据集市 数仓-商业智能系统 数仓-埋 ...
- Nginx 七层反向代理
目录 1.代理 2.正向代理 3.反向代理 4.Nginx 反向代理 5.Nginx 反向代理相关指令介绍 ①.listen ②.server_name ③.location ④.proxy_pass ...
- 实时数仓(二):DWD层-数据处理
目录 实时数仓(二):DWD层-数据处理 1.数据源 2.用户行为日志 2.1开发环境搭建 1)包结构 2)pom.xml 3)MykafkaUtil.java 4)log4j.properties ...
- HBase实战 | 知乎实时数仓架构演进
https://mp.weixin.qq.com/s/hx-q13QteNvtXRpNsE5Y0A 作者 | 知乎数据工程团队编辑 | VincentAI 前线导读:“数据智能” (Data Inte ...
- (转)用Flink取代Spark Streaming!知乎实时数仓架构演进
转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就 ...
- 基于 Kafka 的实时数仓在搜索的实践应用
一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...
随机推荐
- Centos7新增静态路由
文章转载自:https://blog.51cto.com/loong576/2417561 环境说明: 一.临时方式 1. 查看路由和ip [root@centos7 ~]# route -n Ker ...
- 防火墙:iptable和firewalld常用操作
iptables //安装iptables-service yum install iptables-services //编辑config文件 vi /etc/sysconfig/iptables ...
- 使用ConfigMap配置您的应用程序
转载自:https://kuboard.cn/learning/k8s-intermediate/config/config-map.html ConfigMap 作为 Kubernetes API ...
- Kibana:如何周期性地为 Dashboard 生成 PDF Report
转载自:https://blog.csdn.net/UbuntuTouch/article/details/108449775 按照上面的方式填写.记得把之前的 URL 拷贝到 webhook 下的 ...
- 标题,ico动态化
//获取ico元素 var link = document.querySelector("link[rel*='icon']"); link.href = "image/ ...
- SQL语句——为什么分组函数(多行处理函数)不能用在where语句之后?
在SQL语句中,常见的分组查询函数为: sum()求和 avg()求平均值 min()求最小值 max()求最大值 count()求数目 在分组函数中有几个重要的特征: 1.分组函数进行时自动忽略nu ...
- SQL优化步骤
当生产数据量急剧增长后,很多SQL语句可能会开始暴露出性能问题.当面对一个有SQL性能问题的数据库时,应该从何处入手进行系统的分析,使得能够尽快定位到问题SQL处并尽快解决问题? 第一步:查看SQL执 ...
- JUI(6)线程池
文章目录 1.SynchronousQueue 2.线程池(重点) 2.1 使用单例 2.2.使用固定大小的线程 2.3.缓存线程池 2.4 七大参数 1.SynchronousQueue packa ...
- 知识图谱顶会论文(ACL-2022) CAKE:用于多视图KGC的可扩展常识感知框架
CAKE:用于多视图KGC的可扩展常识感知框架.pdf 论文地址:CAKE:Scalable Commonsense-Aware Framework For Multi-View Knowledge ...
- 14.api根路由
我们可以通过使用超链接来提高我们APi的内聚力和可发现性 一.为我们的API创建一个根路径 我们的视图有很多个url,但是没有一个入口点,可以使用@api_view创建一个根路径 #views.p ...