【实时数仓】介绍、需求分析、统计架构分析和ods层日志行为数据采集

news2025/2/25 11:12:10

文章目录

  • 一 电商实时数仓介绍
    • 1 普通实时计算与实时
    • 2 实时电商数仓分层
  • 二 实时数仓需求分析
    • 1 离线计算与实时计算的比较
    • 2 应数场景
      • (1)日常统计报表或分析图中需要包含当日部分
      • (2)实时数据大屏监控
      • (3)数据预警或提示
      • (4)实时推荐系统
  • 三 统计架构分析
    • 1 离线架构
    • 2 实时架构
  • 四 日志数据采集
    • 1 模拟日志生成器的使用
    • 2 本地测试
      • (1)SSM和SpringBoot
      • (2)创建SpringBoot
        • a 创建空的父工程gmall2022-parent,用于管理后续所有的模块module
        • b 新建SpringBoot模块,作为采集日志服务器
        • c 配置项目名称及JDK版本
        • d 选择版本以及通过勾选自动添加lombok、SpringWeb、Kafka相关依赖
      • (3)Demo测试
      • (4)模拟采集埋点数据,并进行处理
        • a 在resources中添加logback.xml配置文件
        • b 修改SpringBoot核心配置文件application.propeties
        • c 在LoggerController中添加方法,将日志打印、落盘并发送到Kafka主题中
        • d kafka常用命令
        • e 修改hadoop101 上的rt_applog目录下的application.yml配置文件
        • f 测试

一 电商实时数仓介绍

1 普通实时计算与实时

普通的实时计算优先考虑时效性,所以从数据源采集经过实时计算直接得到结果。如此做时效性更好,但是弊端是由于计算过程中的中间结果没有沉淀下来,所以当面对大量实时需求的时候,计算的复用性较差(如B想要使用A的结果),开发成本随着需求增加直线上升。

在这里插入图片描述

实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据的复用性(如e可以直接使用b的结果)。

在这里插入图片描述

2 实时电商数仓分层

项目分为以下几层

  • ODS:原始数据,日志和业务数据。
  • DWD:根据数据对象为单位进行分流,比如订单、页面访问等等。维度数据保存到HBase中,事实数据放到DWD主题中。
  • DWM:对于部分数据对象进行进一步加工,比如独立访问、跳出行为,也可以和维度进行关联,形成宽表,依旧是明细数据。
  • DWS:根据某个主题将多个事实数据轻度聚合,形成主题宽表。对于从DWD层获取不到的结果,从dwm层获取。所以实时数仓比离线数仓多出一层DWM。
  • ADS: 把Clickhouse中的数据根据可视化需要进行筛选聚合。

二 实时数仓需求分析

1 离线计算与实时计算的比较

离线计算:就是在计算开始前已知所有输入数据,输入数据不会产生变化,一般计算量级较大,计算时间也较长。例如今天早上一点,把昨天累积的日志,计算出所需结果。最经典的就是Hadoop的MapReduce方式;

一般是根据前一(几)日(T + 1(n))的数据生成报表,虽然统计指标、报表繁多,但是对时效性不敏感。从技术操作的角度,这部分属于批处理的操作。即根据确定范围的数据一次性计算。

实时计算:输入数据是可以以序列化的方式一个个输入并进行处理的,也就是说在开始的时候并不需要知道所有的输入数据。与离线计算相比,运行时间短,计算量级相对较小。强调计算过程的时间要短,即所查当下给出结果。

主要侧重于对当日(T + 0)数据的实时监控,通常业务逻辑相对离线需求简单一下,统计指标也少一些,但是更注重数据的时效性,以及用户的交互性。从技术操作的角度,这部分属于流处理的操作。根据数据源源不断地到达进行实时的运算。

大数据的设计架构主要有两种:

  • lambda:离线数据与实时数据一起运行,完成后将结果聚合起来。
  • kappa:在实时计算得到结果后也可以做离线。【实时 + 离线】

Flink中的流批一体使用Flink-SQL实现,处理两种数据使用的SQL相同,不同点在于数据的日期。

2 应数场景

(1)日常统计报表或分析图中需要包含当日部分

在这里插入图片描述

对于日常企业、网站的运营管理如果仅仅依靠离线计算,数据的时效性往往无法满足。通过实时计算获得当日、分钟级、秒级甚至亚秒的数据更加便于企业对业务进行快速反应与调整。

所以实时计算结果往往要与离线数据进行合并或者对比展示在BI或者统计平台中。

(2)实时数据大屏监控

在这里插入图片描述

数据大屏,相对于BI工具或者数据分析平台是更加直观的数据可视化方式。尤其是一些大促活动,已经成为必备的一种营销手段。

另外还有一些特殊行业,比如交通、电信的行业,那么大屏监控几乎是必备的监控手段。

(3)数据预警或提示

经过大数据实时计算得到的一些风控预警、营销信息提示,能够快速让风控或营销部分得到信息,以便采取各种应对。

比如,用户在电商、金融平台中正在进行一些非法或欺诈类操作,那么大数据实时计算可以快速的将情况筛选出来发送风控部门进行处理,甚至自动屏蔽。 或者检测到用户的行为对于某些商品具有较强的购买意愿,那么可以把这些“商机”推送给客服部门,让客服进行主动的跟进。

(4)实时推荐系统

实时推荐就是根据用户的自身属性结合当前的访问行为,经过实时的推荐算法计算,从而将用户可能喜欢的商品、新闻、视频等推送给用户。

这种系统一般是由一个用户画像批处理加一个用户行为分析的流处理组合而成。

三 统计架构分析

1 离线架构

在这里插入图片描述

MQ的作用:

  • 系统解耦
  • 异步通信
  • 流量削峰

2 实时架构

在这里插入图片描述

四 日志数据采集

1 模拟日志生成器的使用

这里提供了一个模拟生成数据的jar包,可以生成日志,并将其发送给某一个指定的端口,需要大数据程序员了解如何从指定端口接收数据并对数据进行处理的流程。

在这里插入图片描述

上传文件application.yml、gmall2022-mock-log-2022-11-28.jar。

根据实际需要修改application.yml。

使用模拟日志生成器的jar 运行

java -jar gmall2022-mock-log-2022-11-28.jar

目前还没有地址接收日志,所以程序运行后的结果有如下错误

在这里插入图片描述

注意:ZooKeeper从3.5开始,AdminServer的端口也是8080,如果在本机启动了zk,那么可能看到405错误,意思是找到请求地址了,但是接收的方式不对。

2 本地测试

(1)SSM和SpringBoot

Spring:帮助程序员创建对象并且管理对象之间的关系。

  • IOC:控制反转。
  • AOP:面向切面编程。

SpringMVC:接收客户端的请求,并且进行响应。

mybatis:ORM(ObjectRelationMapption),将关系型数据库中的一张表和java中的类进行映射。

SpringBoot将SSM进行整合,约定大于配置。

(2)创建SpringBoot

a 创建空的父工程gmall2022-parent,用于管理后续所有的模块module

为了将各个模块放在一起,但是模块彼此间还是独立的,所以创建一个Empty
Project即可;如果要是由父module管理子module,需要将父module的pom.xml文件的设置为pom。

b 新建SpringBoot模块,作为采集日志服务器

在父project下增加一个Module,选择Spring Initializr。

在这里插入图片描述

注意:有时候SpringBoot官方脚手架不稳定,可以切换Custom,选择国内地址。

c 配置项目名称及JDK版本

在这里插入图片描述

d 选择版本以及通过勾选自动添加lombok、SpringWeb、Kafka相关依赖

在这里插入图片描述

(3)Demo测试

创建FirstController输出SpringBoot处理流程。

几个注解说明:

  • Controller:将类对象的创建交给Spring容器,但是用Controller标记的类,如果方法的返回值是String,那么认为进行页面的跳转。
  • RequestMapping:将请求交给方法去处理。
  • ResponseBody:如果想要将字符串直接响应,不进行页面跳转,需要在方法上添加ResponseBody注解。
  • RestController:RestController = Controller + ResponseBody。
  • RequestParam:将浏览器上接收的参数和方法中定义的形式参数映射起来。
/**
 * 回顾SpringMVC Controller
 */
//@Controller
@RestController
public class FirstController {

    @RequestMapping("/first")
    //@ResponseBody
    public String first(@RequestParam("hahaa") String username,
                        @RequestParam("heihei") String password){
        System.out.println(username + "---" + password);
        return "success";
    }
}

(4)模拟采集埋点数据,并进行处理

采集流程如下,在服务器执行jar包,启动本机执行程序,落盘到windows,最后由kafka消费数据。

在这里插入图片描述

a 在resources中添加logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="e:/logs" />
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>


    <!-- 将某一个包下日志单独打印日志 -->
    <logger name="com.hzy.gmall.controller.LoggerController"
            level="INFO" additivity="false">
        <appender-ref ref="rollingFile" />
        <appender-ref ref="console" />
    </logger>

    <root level="error" additivity="false">
        <appender-ref ref="console" />
    </root>
</configuration>

logback配置文件说明

  • appender:追加器,描述如何写入到文件中(写在哪,格式,文件的切分)。

    • ConsoleAppender–追加到控制台。
    • RollingFileAppender–滚动追加到文件。
  • logger:控制器,描述如何选择追加器。

    注意:要是单独为某个类指定的时候,不要忘记修改类的全限定名。

  • 日志级别从低到高:TRACE、[DEBUG、INFO、WARN、ERROR]、FATAL。

配置完成后,程序运行读取的是target文件下的classes,而不是resources下的logback.xml。

想要使用,需要在类上添加Slf4j注解。

b 修改SpringBoot核心配置文件application.propeties

#============== kafka ===================
# 指定kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=hadoop101:9092,hadoop102:9092,hadoop103:9092

# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

c 在LoggerController中添加方法,将日志打印、落盘并发送到Kafka主题中

@RestController
@Slf4j
public class LoggerController {

    // 不使用Slf4j注解需要自己定义接收日志的对象
    // private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerController.class);

    @Autowired
    private KafkaTemplate kafkaTemplate;

    @RequestMapping("/applog")
    public String log(@RequestParam("param") String logStr){
        // 1 打印输出到控制台
        // System.out.println(logStr);
        // 2 落盘,使用logback完成
        log.info(logStr);
        // 3 发送到kafka主题
        kafkaTemplate.send("ods_base_log",logStr);
        return "success";
    }
}

在kafka中的写法:

Properties props = new Properties();
props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop101:9092");
props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"");
props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"");

KafkaProducer kafkaProducer = new KafkaProducer(props);
kafkaProducer.send(
        /**
         * 生产者的分区策略:
         *      1 通过分区号指定固定分区
         *      2 指定key,根据key获取哈希值,对分区数做模运算,决定将数据发送到那一个分区内
         *      3 粘性分区,不停的向一个分区发送数据,满足以下条件之一,会改变分区
         *          1)大于batchsize(默认16K)
         *          2)大于一定时间
         */
        new ProducerRecord("ods_base_log",logStr)
);

但是,SpringBoot是一个全家桶,对一些常见的组件,提供了一些类。

d kafka常用命令

在服务器上将kafka的默认分区数改为4。

vim /opt/module/kafka_2.11-2.4.1/config/server.properties 

num.partitions=4
# 启动zookeeper
zk.sh start
# 启动kafka
kfk.sh start

# 查看所有主题
bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --list
# 创建主题
bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --create --topic first --partitions 4 --replication-factor 2
# 查看主题详情信息
bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --describe --topic first
# 删除主题
bin/kafka-topics.sh --bootstrap-server hadoop101:9092 --delete --topic first
# 101生产消息
bin/kafka-console-producer.sh --broker-list hadoop101:9092 --topic frist
# 101消费消息
bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic first

e 修改hadoop101 上的rt_applog目录下的application.yml配置文件

修改地址和日期,地址为本机地址。

f 测试

启动kafka消费者进行测试。

bin/kafka-console-consumer.sh --bootstrap-server  hadoop101:9092 --topic  ods_base_log

运行Windows上的Idea程序LoggerApplication。

运行rt_applog下的jar包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不同系列的 ESP 芯片的 GPIO 默认初始状态

ESP 系列芯片的 GPIO 上电状态的含义&#xff1a; wpu: weak pull-up&#xff08;为弱上拉模式&#xff09;wpd: weak pull-down&#xff08;为弱下拉模式&#xff09;ie: input enable&#xff08;输入使能模式&#xff09;oe: output enable&#xff08;输出使能模式&#x…

【Docker】第三章 镜像管理

3.1 镜像是什么 简单说&#xff0c;Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。 3.2 镜像从哪里来 Docker Hub 是由Docker公司负责维护的公共注册中心&#xff0c;包含大量的容器镜像&#xff0c;Docker工具默认从这个公共镜像库下载镜像。 https://hub.docker.…

碳中和科普

什么叫碳达峰和碳中和&#xff1f; 我国在2020年第75届联合国大会上宣布&#xff0c;二氧化碳排放量努力争取于2030年前达到峰值&#xff0c;2060年前实现碳中和。 碳达峰和碳中和中的碳指的都是以二氧化碳为代表的温室气体 碳达峰 碳达峰指的是碳排放达到峰值后进入平稳下降…

洛谷入门赛 202212F 宇宙密码 ——深搜

题目描述 经历十九年的探索&#xff0c;人们终于找到了宇宙中的那份瑰宝。 这份瑰宝被装在一个密码箱里&#xff0c;按照情报&#xff0c;密码应为一串长度为 nn 的数字 aa。 人们满怀希望地输入了密码&#xff0c;但是密码箱没有任何反应。 这时人们意识到&#xff0c;在十…

迈向高算力、跨域融合新拐点,智能座舱各路玩家如何卡位?

当前&#xff0c;中国车联网发展进入平稳增长周期&#xff0c;5G、V2X市场迎来拐点。 借助数字化转型驱动&#xff0c;互联化、数字化、个性化的智能座舱&#xff0c;以及与之强关联的座舱域控制器方案正实现快速发展和落地。 高工智能汽车研究院监测数据显示&#xff0c;202…

[附源码]Python计算机毕业设计SSM基于人脸识别和测温的宿舍管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

使用ESPRIT,LS-ESPRIT,Music以及Root-Music四种算法进行角度估计matlab仿真

目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 1.1ESPRIT ESPRIT算法全称为&#xff1a;Estimation of Signal Parameters using Rotational Invariance Techniques.与Root_MUSIC算法相同&#xff0c;也是一种参数估计技术。ESPRIT算法在旋转矢量中&#xff0…

Jetpack组件(三)Lifecycle

本篇是Jetpack组件系列文章的第三篇&#xff0c;将介绍第二个组件Lifecycle。Lifecycle为开发者管理 Activity 和 Fragment 生命周期提供了极大的便利&#xff0c;帮助开发者书写更轻量、易于维护的代码 一、Lifecycle简介 Lifecycle用于存储有关组件&#xff08;如 activity …

UE实现指北针效果

文章目录 1.实现目标2.实现过程2.1 设计指北针Widget2.2 实时指北2.3 添加到页面显示3.参考资料1.实现目标 在UE中实现指北针效果,GIF图如下。 2.实现过程 实现思路较为简单,即获取到当前场景的Rotation,来设置UMG的旋转角度即可。 2.1 设计指北针Widget 包括底图圆环,…

嵌入式开发学习之--通讯的基本概念

提示&#xff1a;本章主要了解一下通讯的基本概念&#xff0c;无代码 文章目录前言一、通讯的基本概念1.1串行通讯与并行通讯1.2全双工、半双工及单工通讯1.3同步通讯与异步通讯1.4通讯速率总结前言 对于嵌入式开发来说&#xff0c;基本就是在传递信息和解析信息&#xff0c;根…

Kafka高级特性解析之物理存储

1、日志存储概述 Kafka 消息是以主题为单位进行归类&#xff0c;各个主题之间是彼此独立的&#xff0c;互不影响。每个主题又可以分为一个或多个分区。每个分区各自存在一个记录消息数据的日志文件。图中&#xff0c;创建了一个 tp_demo_01 主题&#xff0c;其存在6个 Paritio…

《四叶游戏》:梦想执念·棒球1号位

《幸运四叶草》又名《四叶游戏》&#xff0c;是日本漫画家安达充的代表作品之一。 2005年 – 2010年在《周刊少年Sunday》上连载。是小学馆漫画赏第54回&#xff08;平成20年度&#xff09;少年向部门得奖作品。作品亦改编为同名电视动画和游戏。 中文名 幸运四叶草 原版名称 …

海带软件分享——玩转OpenAI聊天机器人ChatGPT(免费中文版)

目录 2022 地表最强AI聊天机器人ChatGPT诞生&#xff01; 一、前言 &#x1f384;&#x1f388; ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体&#xff0c;GPT-3经过训练&#xff0c;可以在对话中生成类似人类的文本响应。ChatGPT旨在用作聊天机器人&a…

微服务框架 SpringCloud微服务架构 28 数据同步 28.5 监听 MQ 消息

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构28 数据同步28.5 监听 MQ 消息28.5.1 直接开干28 数据同步 28.5 监听 MQ …

阿里云创建https请求

1.添加二级域名 点击域名或者解析设置 2.点击添加记录&#xff0c;设置二级域名&#xff0c;二级域名指向地址和生效时间 3.测试 成功 4.对域名进行免费CA证书申请&#xff0c;添加绑定域名&#xff0c;dns验证&#xff0c;CA证书算法,验证成功后提交审核&#xff0c;约6分…

一键部署工具easy-jenkins,界面友好,操作简单

文章目录前言一、项目地址二、使用步骤1.项目结构2.启动主类 EasyJenkinsApplication3.安装4.项目启动图三、功能点介绍1.部署列表1.添加连接&#xff08;部署jar&#xff09;1.添加本地项目地址2.添加服务器相关信息2.部署jar3.部署成功4.删除5.编辑2.部署记录3.数据分支1.创建…

[oeasy]python0027_整合程序_延迟输出时间_整合两个py程序

整合程序 回忆上次内容 通过搜索发现 time中有函数可以延迟 time.sleep(1) 还可以让程序无限循环 while True: 现在需要两个程序的整合 循环延迟输出时间输出怎么办&#xff1f;&#x1f914; 整合基础 一定要自己整合啊生命在于瞎折腾!&#x1f4aa; 进行整合 思路就是 循环…

期末复习-大数据技术原理与应用

大数据技术原理与应用大数据基础什么促进了大数据时代的诞生&#xff1f;大数据的发展进程大数据的 4V 概念大数据的计算模式云计算HadoopHadoop的生态系统Hadoop 安装和使用大数据存储和管理分布式文件系统DFSHDFS 数据块计算集群中元数据需要的内存HBase shell基本命令NoSQL数…

敲开社科院与杜兰大学金融管理硕士项目的大门,开启在职读研的快乐时光

随着23考研的到来&#xff0c;备考的你做好准备了吗&#xff1f;2023年考研人数预计超过520万&#xff0c;达到历史新高&#xff0c;前段时间还有人热议&#xff0c;不久的将来研究生学历将成为各大国有企业入职的起步门槛。随着各个行业对人才要求的提高&#xff0c;考研热度持…

hadoop项目实战——奥运会数据分析

大三学期项目 hadoop MapReduce 奥运会数据分析结果&#xff1a; 有没需要详细实现方法的小伙伴呀&#xff1f;可以在评论区评论一下。 如果人多&#xff0c;那么后续会详细更新实现方法。