【实时数仓】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 更加轻量级
数据格式对比
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/15764217.html