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

这篇具有很好参考价值的文章主要介绍了【实时数仓】介绍、需求分析、统计架构分析和ods层日志行为数据采集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 电商实时数仓介绍

1 普通实时计算与实时

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

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

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

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

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)日常统计报表或分析图中需要包含当日部分

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

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

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

(2)实时数据大屏监控

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

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

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

(3)数据预警或提示

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

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

(4)实时推荐系统

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

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

三 统计架构分析

1 离线架构

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

MQ的作用:

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

2 实时架构

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

四 日志数据采集

1 模拟日志生成器的使用

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

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

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

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

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

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

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

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

注意: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。

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

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

c 配置项目名称及JDK版本

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

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

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

(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消费数据。

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

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包。文章来源地址https://www.toymoban.com/news/detail-422559.html

到了这里,关于【实时数仓】介绍、需求分析、统计架构分析和ods层日志行为数据采集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实时数仓建设第2问:怎样使用flink sql快速无脑统计当天下单各流程(已发货,确认收货等等)状态的订单数量

    实时统计当天下单各流程状态(已支付待卖家发货,卖家通知物流揽收,待买家收货等等)中的订单数量。 订单表的binlog数据发送到kafka,flink从kafka接受消息进行指标统计。因为每笔订单的状态会发生变化,比如上午为【已支付待卖家发货】,这个时候【已支付待卖家发货】指标

    2024年02月16日
    浏览(39)
  • Apache Flink X Apache Doris构建极速易用的实时数仓架构

    大家好,我叫王磊。是SelectDB 大数据研发。今天给大家带来的分享是《Apache Flink X Apache Doris构建极速易用的实时数仓架构》。 下面是我们的个人介绍:我是Apache Doris Contributor 和阿里云 MVP。同时著有《 图解 Spark 大数据快速分析实战》等书籍。 接下来咱们进入本次演讲的正题

    2023年04月24日
    浏览(43)
  • 电商API接口的应用||大数据电商数仓分析项目||电商热门商品统计

    如何定义热门商品? 简单模型:直接通过用户对商品的点击量来衡量商品热度。 复杂模型:依据各类别权重(后续补充) 如何获取区域? 通过用户点击日志,获取访问IP,进而获取区域信息。 通过数据库中的订单关联用户表,获取用户的地域信息 如何去除爬虫水军(商家

    2024年04月28日
    浏览(40)
  • 架构师如何做好需求分析

    Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. 架构师如何做好需求分析是一个重要的问题 需求: 1.主要步骤 作为一名架构师,需求分析是其工作中非常重要的一环。以

    2024年02月09日
    浏览(38)
  • 需求分析引言:架构漫谈(一)

    本文主要对架构的概念做一些介绍,并引申出需求分析的重要性。 后续准备做一个系列,定期介绍我工作以来的一些需求实现的案例。 注:因为架构的内容比较庞大,里面的每个点,都可以扩展成一系列的文章, 因此,本文只是漫谈,多数内容仅做介绍,后续有时间,我再

    2024年02月10日
    浏览(41)
  • 架构设计之需求分析

    大家好,我是易安。 设计架构的第一步是需求分析。那么,为什么要做需求分析?如何做好需求分析?今天我们一起聊一聊需求分析这件事儿 为何要做需求分析? 首先 ,当然是因为我们做软件本身就是为了满足用户需求。那么,用户需求到底为何,我们需要清楚定义。 其

    2024年02月04日
    浏览(34)
  • 需求分析引言:架构漫谈(五)架构师成长之路

    我研发领域也从事了一些年,期间也做过一些架构设计工作,包括C#单体转型为Java微服务、Python单体转型为Java微服务等, 也尝试着从自己的经验角度,来汇总一些知识点,同时描述一下如何成长为一个合格的软件架构师,仅供参考,也欢迎跟我一起探讨。 顾名思义,架构师

    2024年02月13日
    浏览(38)
  • 【架构设计】高并发架构实战:从需求分析到系统设计

      很多软件工程师的职业规划是 成为架构师 ,但是要成为架构师很多时候要求 先有架构设计经验 ,而不做架构师又怎么会有架构设计经验呢?那么要 如何获得架构设计经验 呢? 高并发是指系统在同一时间内处理的请求量非常大,通常是指每秒处理的请求量达到数千到数百

    2024年02月15日
    浏览(49)
  • 高并发架构实战:从需求分析到系统设计

    很多软件工程师的职业规划是 成为架构师 ,但是要成为架构师很多时候要求 先有架构设计经验 ,而不做架构师又怎么会有架构设计经验呢?那么要 如何获得架构设计经验 呢? 一方面可以 通过工作来学习 ,观察所在团队的架构师是如何工作的,协助他做一些架构设计和落

    2024年02月15日
    浏览(51)
  • 【高并发】高并发架构实战:从需求分析到系统设计

               Yan-英杰的主页 悟已往之不谏 知来者之可追   C++程序员,2024届电子信息研究生            很多软件工程师的职业规划是 成为架构师 ,但是要成为架构师很多时候要求 先有架构设计经验 ,而不做架构师又怎么会有架构设计经验呢?那么要 如何获得架构

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包