不会做大数据实时计算?10年数据分析师整理,一文给出解决方案

news2025/2/25 21:41:47

本文分为四个章节介绍实时计算,第一节介绍实时计算出现的原因及概念;第二节介绍实时计算的应用场景;第三节介绍实时计算常见的架构;第四节是实时数仓解决方案。

一、实时计算

实时计算一般都是针对海量数据进行的,并且要求为秒级。由于大数据兴起之初,Hadoop并没有给出实时计算解决方案,随后Storm,SparkStreaming,Flink等实时计算框架应运而生,而Kafka,ES的兴起使得实时计算领域的技术越来越完善,而随着物联网,机器学习等技术的推广,实时流式计算将在这些领域得到充分的应用。

一、实时计算的三个特征:

无限数据:无限数据指的是一种不断增长的,基本上无限的数据集。这些通常被称为“流数据”,而与之相对的是有限的数据集。

无界数据处理:一种持续的数据处理模式,能够通过处理引擎重复的去处理上面的无限数据,是能够突破有限数据处理引擎的瓶颈的。

低延迟:延迟是多少并没有明确的定义。但我们都知道数据的价值将随着时间的流逝降低,时效性将是需要持续解决的问题。

现在大数据应用比较火爆的领域,比如推荐系统在实践之初受技术所限,可能要一分钟,一小时,甚至更久对用户进行推荐,这远远不能满足需要,我们需要更快的完成对数据的处理,而不是进行离线的批处理。

二、实时计算应用场景

随着实时技术发展趋于成熟,实时计算应用越来越广泛,以下仅列举常见的几种实时计算的应用常见:

1. 实时智能推荐

智能推荐会根据用户历史的购买或浏览行为,通过推荐算法训练模型,预测用户未来可能会购买的物品或喜爱的资讯。对个人来说,推荐系统起着信息过滤的作用,对Web/App服务端来说,推荐系统起着满足用户个性化需求,提升用户满意度的作用。推荐系统本身也在飞速发展,除了算法越来越完善,对时延的要求也越来越苛刻和实时化。利用Flink流计算帮助用户构建更加实时的智能推荐系统,对用户行为指标进行实时计算,对模型进行实时更新,对用户指标进行实时预测,并将预测的信息推送给Web/App端,帮助用户获取想要的商品信息,另一方面也帮助企业提升销售额,创造更大的商业价值。

2. 实时欺诈检测

在金融领域的业务中,常常出现各种类型的欺诈行为,例如信用卡欺诈,信贷申请欺诈等,而如何保证用户和公司的资金安全,是近年来许多金融公司及银行共同面对的挑战。随着不法分子欺诈手段的不断升级,传统的反欺诈手段已经不足以解决目前所面临的问题。以往可能需要几个小时才能通过交易数据计算出用户的行为指标,然后通过规则判别出具有欺诈行为嫌疑的用户,再进行案件调查处理,在这种情况下资金可能早已被不法分子转移,从而给企业和用户造成大量的经济损失。而运用Flink流式计算技术能够在毫秒内就完成对欺诈行为判断指标的计算,然后实时对交易流水进行实时拦截,避免因为处理不及时而导致的经济损失。

3. 舆情分析

在这里插入图片描述

有的客户需要做舆情分析,要求所有数据存放若干年,舆情数据每日数据量可能超百万,年数据量可达到几十亿的数据。而且爬虫爬过来的数据是舆情,通过大数据技术进行分词之后得到的可能是大段的网友评论,客户往往要求对舆情进行查询,做全文本搜索,并要求响应时间控制在秒级。爬虫将数据爬到大数据平台的Kafka里,在里面做Flink流处理,去重去噪做语音分析,写到ElasticSearch里。大数据的一个特点是多数据源,大数据平台能根据不同的场景选择不同的数据源。

4. 复杂事件处理
在这里插入图片描述

对于复杂事件处理,比较常见的集中于工业领域,例如对车载传感器,机械设备等实时故障检测,这些业务类型通常数据量都非常大,且对数据处理的时效性要求非常高。通过利用Flink提供的CEP进行时间模式的抽取,同时应用Flink的Sql进行事件数据的转换,在流式系统中构建实施规则引擎,一旦事件触发报警规则,便立即将告警结果通知至下游通知系统,从而实现对设备故障快速预警检测,车辆状态监控等目的。

5. 实时机器学习

实时机器学习是一个更宽泛的概念,传统静态的机器学习主要侧重于静态的模型和历史数据进行训练并提供预测。很多时候用户的短期行为,对模型有修正作用,或者说是对业务判断有预测作用。对系统来说,需要采集用户最近的行为并进行特征工程,然后给到实时机器学习系统进行机器学习。如果动态地实施新规则,或是推出新广告,就会有很大的参考价值。

三、实时计算架构

我们先来看一张大数据平台的实时架构图:
在这里插入图片描述

数据同步:
在上面这张架构图中,数据从Web平台中产生,通过数据同步系统导入到大数据平台,由于数据源不同,这里的数据同步系统实际上是多个相关系统的组合。数据库同步通常用 Sqoop,日志同步可以选择 Flume等,不同的数据源产生的数据质量可能差别很大,数据库中的格式化数据直接导入大数据系统即可,而日志和爬虫产生的数据就需要进行大量的清洗、转化处理才能有效使用。

数据存储:
该层对原始数据、清洗关联后的明细数据进行存储,基于统一的实时数据模型分层理念,将不同应用场景的数据分别存储在 Kafka、HDFS、Kudu、 Clickhouse、Hbase等存储中。

数据计算:
计算层主要使用 Flink、Spark、Presto 以及 ClickHouse 自带的计算能力等四种计算引擎,Flink 计算引擎主要用于实时数据同步、 流式 ETL、关键系统秒级实时指标计算场景,Spark SQL 主要用于复杂多维分析的准实时指标计算需求场景,Presto 和 ClickHouse 主要满足多维自助分析、对查询响应时间要求不太高的场景。

实时应用:
以统一查询服务对各个业务线数据场景进行支持,业务主要包括实时大屏、实时数据产品、实时 OLAP、实时特征等。

当然一个好的大数据平台不能缺少元数据管理及数据治理:

1. 元数据及指标管理:主要对实时的Kafka表、Kudu表、Clickhouse表、Hive表等进行统一管理,以数仓模型中表的命名方式规范表的命名,明确每张表的字段含义、使用方,指标管理则是尽量通过指标管理系统将所有的实时指标统一管理起来,明确计算口径,提供给不同的业务方使用;

**2. 数据质量及血缘分析:**数据质量分为平台监控和数据监控两个部分,血缘分析则主要是对实时数据依赖关系、实时任务的依赖关系进行分析。

以上架构只是大数据平台通用的数据模型,如果要具体的建设,需要考虑以下情况,业务需求需要实时还是准实时即可,数据时效性是秒级还是分钟级等。

调度开销方面,准实时数据是批处理过程,因此仍然需要调度系统支持,调度频率较高,而实时数据却没有调度开销;

业务灵活性方面,因为准实时数据是基于 ETL 或 OLAP 引擎实现,灵活性优于基于流计算的方式;

在对数据晚到的容忍度方面,因为准实时数据可以基于一个周期内的数据进行全量计算,因此对于数据晚到的容忍度也是比较高的,而实时数据使用的是增量计算,对于数据晚到的容忍度更低一些;

适用场景方面,准实时数据主要用于有实时性要求但不太高、涉及多表关联和业务变更频繁的场景,如交易类型的实时分析,实时数据则更适用于实时性要求高、数据量大的场景,如实时特征、流量类型实时分析等场景。

实时架构

在某些场景中,数据的价值随着时间的推移而逐渐减少。所以在传统大数据离线数仓的基础上,逐渐对数据的实时性提出了更高的要求。

于是随之诞生了大数据实时数仓,并且衍生出了两种技术架构Lambda和Kappa。

1. Lambda架构

先来看下Lambda架构图:

在这里插入图片描述

数据从底层的数据源开始,经过Kafka、Flume等数据组件进行收集,然后分成两条线进行计算:

一条线是进入流式计算平台(例如 Storm、Flink或者SparkStreaming),去计算实时的一些指标;
另一条线进入批量数据处理离线计算平台(例如Mapreduce、Hive,Spark SQL),去计算T+1的相关业务指标,这些指标需要隔日才能看见。

为什么Lambda架构要分成两条线计算?

假如整个系统只有一个批处理层,会导致用户必须等待很久才能获取计算结果,一般有几个小时的延迟。电商数据分析部门只能查看前一天的统计分析结果,无法获取当前的结果,这对于实时决策来说有一个巨大的时间鸿沟,很可能导致管理者错过最佳决策时机。

Lambda架构属于较早的一种架构方式,早期的流处理不如现在这样成熟,在准确性、扩展性和容错性上,流处理层无法直接取代批处理层,只能给用户提供一个近似结果,还不能为用户提供一个一致准确的结果。因此Lambda架构中,出现了批处理和流处理并存的现象。

在 Lambda 架构中,每层都有自己所肩负的任务。

1. 批处理层存储管理主数据集(不可变的数据集)和预先批处理计算好的视图:

批处理层使用可处理大量数据的分布式处理系统预先计算结果。它通过处理所有的已有历史数据来实现数据的准确性。这意味着它是基于完整的数据集来重新计算的,能够修复任何错误,然后更新现有的数据视图。输出通常存储在只读数据库中,更新则完全取代现有的预先计算好的视图。

2. 流处理层会实时处理新来的大数据:

流处理层通过提供最新数据的实时视图来最小化延迟。流处理层所生成的数据视图可能不如批处理层最终生成的视图那样准确或完整,但它们几乎在收到数据后立即可用。而当同样的数据在批处理层处理完成后,在速度层的数据就可以被替代掉了。

那Lambda架构有没有缺点呢?

Lambda架构经历多年的发展,其优点是稳定,对于实时计算部分的计算成本可控,批量处理可以用晚上的时间来整体批量计算,这样把实时计算和离线计算高峰分开,这种架构支撑了数据行业的早期发展,但是它也有一些致命缺点,并在大数据3.0时代越来越不适应数据分析业务的需求。缺点如下:

使用两套大数据处理引擎:维护两个复杂的分布式系统,成本非常高。

批量计算在计算窗口内无法完成:在IOT时代,数据量级越来越大,经常发现夜间只有4、5个小时的时间窗口,已经无法完成白天20多个小时累计的数据,保证早上上班前准时出数据已成为每个大数据团队头疼的问题。

数据源变化都要重新开发,开发周期长:每次数据源的格式变化,业务的逻辑变化都需要针对ETL和Streaming做开发修改,整体开发周期很长,业务反应不够迅速。

导致 Lambda 架构的缺点根本原因是要同时维护两套系统架构:批处理层和速度层。我们已经知道,在架构中加入批处理层是因为从批处理层得到的结果具有高准确性,而加入速度层是因为它在处理大规模数据时具有低延时性。

那我们能不能改进其中某一层的架构,让它具有另外一层架构的特性呢?

例如,改进批处理层的系统让它具有更低的延时性,又或者是改进速度层的系统,让它产生的数据视图更具准确性和更加接近历史数据呢?

另外一种在大规模数据处理中常用的架构——Kappa 架构,便是在这样的思考下诞生的。

2. Kappa架构

Kafka的创始人Jay Kreps认为在很多场景下,维护一套Lambda架构的大数据处理平台耗时耗力,于是提出在某些场景下,没有必要维护一个批处理层,直接使用一个流处理层即可满足需求,即下图所示的Kappa架构:

在这里插入图片描述

这种架构只关注流式计算,数据以流的方式被采集过来,实时计算引擎将计算结果放入数据服务层以供查询。可以认为Kappa架构是Lambda架构的一个简化版本,只是去除掉了Lambda架构中的离线批处理部分;

Kappa架构的兴起主要有两个原因:

Kafka不仅起到消息队列的作用,也可以保存更长时间的历史数据,以替代Lambda架构中批处理层数据仓库部分。流处理引擎以一个更早的时间作为起点开始消费,起到了批处理的作用。
Flink流处理引擎解决了事件乱序下计算结果的准确性问题。

Kappa架构相对更简单,实时性更好,所需的计算资源远小于Lambda架构,随着实时处理的需求在不断增长,更多的企业开始使用Kappa架构。但这不意味着kappa架构能够取代Lambda架构。

Lambda和kappa架构都有各自的适用领域;例如流处理与批处理分析流程比较统一,且允许一定的容错,用Kappa比较合适,少量关键指标(例如交易金额、业绩统计等)使用Lambda架构进行批量计算,增加一次校对过程。

还有一些比较复杂的场景,批处理与流处理产生不同的结果(使用不同的机器学习模型,专家系统,或者实时计算难以处理的复杂计算),可能更适合Lambda架构。

四、实时数仓解决方案

实时数仓分层架构为了避免面向需求响应的烟囱式构建,实时数仓也引入了类似于离线数仓的分层理念,主要是为了提高模型的复用率,同时也要考虑易用性、一致性以及计算成本。

当然实时数仓的分层架构在设计上并不会像离线数仓那么复杂,避免数据在流转过程中造成的不必要的延时响应;

实时数仓分层架构图:

在这里插入图片描述

ODS层:以Kafka为支撑,将所有需要实时处理的相关数据放到Kafka队列中来实现贴源数据层;

DWD层:实时计算订阅业务数据消息队列,然后通过数据清洗、多数据源join、流式数据与离线维度信息等的组合,将一些相同粒度的业务系统、维表中的维度属性全部关联到一起,增加数据易用性和复用性,得到最终的实时明细数据;

DIM层:存放用于关联查询的维度信息,可以根据数据现状来选择存储介质,例如使用HBase或者Mysql

DWS层:轻度汇总层是为了便于面向AdHoc查询或者Olap分析构建的轻度汇总结果集合,适合数据维度、指标信息比较多的情况,为了方便根据自定义条件的快速筛选和指标聚合,推荐使用MPP类型数据库进行存储,此层可视场景情况决定是否构建;

APP层:面向实时数据场景需求构建的高度汇总层,可以根据不同的数据应用场景决定使用存储介质或者引擎;例如面向业务历史明细、BI支持等Olap分析场景,可以使用Druid、Greenplum,面向实时监控大屏、高并发汇总指标等需求,可以使用KV模式的HBase;数据量较小的时候,也可以使用Mysql来进行存储。

这里要注意下,其实APP层已经脱离了数仓,这里虽然作为了数仓的独立分层,但是实际APP层的数据已经分布存储在各种介质中用于使用。

基于Flink 构建的实时数仓

随着业务场景的丰富,更多的实时需求不断涌现,在追求实时任务高吞吐低延迟的同时,对计算过程中间状态管理,灵活时间窗口支持,以及 exactly once 语义保障的诉求也越来越多。

为什么选择Flink实时计算平台?之所以选择用Flink替代原有Storm、SparkStreaming是基于以下原因考虑的,这也是实时数仓关注的核心问题:

1、高吞吐、低延时;
2、端到端的 Exactly-once,保证了数据的准确性;
3、可容错的状态管理,实时数仓里面会进行很多的聚合计算,这些都需要对于状态进行访问和管理;
4、丰富的API,对Streaming/Table/SQL支持良好,支持UDF、流式join、时间窗口等高级用法;
5、完善的生态体系,实时数仓的构建会涉及多种存储,Flink在这方面的支持也比较完善。

基于Flink的实时数仓数据流转过程:

在这里插入图片描述

数据在实时数仓中的流转过程,实际和离线数仓非常相似,只是由Flink替代Hive作为了计算引擎,把存储由HDFS更换成了Kafka,但是模型的构建思路与流转过程并没有发生变化。

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

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

相关文章

RISC-V OS(老师的OS) 基于 汪辰老师的视频笔记

前言 最后面没写完,以后再补。。。 RISC-V OS RVOS 介绍 操作系统定义 操作系统(英语:Operating System,缩写:OS)是一组系统软件程序: 主管并控制计算机操作、运用和运行硬件、软件资源。提…

[oeasy]python049_帮助手册_pydoc_manual_document

帮助手册 回忆上次内容 上次了解了注释 注释是为了让程序更可读注释不会影响程序运行速度 注释分为两种 单行的 以#开头不能是字符串当中的# 多行的 三个"三个 多行注释还有什么特殊功能么?🤔 增加描述说明 #!/usr/bin/python3 #vim: set file…

技能梳理38@stm32+CC2530+超声波+光敏+oled

技能梳理38stm32CC2530超声波光敏oled 1、项目简介 2、实现逻辑 #主从机使用zigbee通信 #主机oled显示当前停车场位置图 #从机通过超声波和光敏一起检测是否有车 #当某位置车辆进出,在主机上oled进行提示 3、应用场景 #车辆无线检测 #货架商品有无检测 4、核心…

UWA Pipeline 2.4.2 版本更新说明

UWA Pipeline是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线,提供可视化的CICD操作界面、高可用的自动化测试以及UWA性能保障服务的无缝贴合等实用功能。 在本次2.4.2版本更新中,我们对Pipeline的…

【Java+GS】GeoServer,通过配置自定义样式,实现不同图斑展示不同颜色。附java实现方法

文章目录 客户端发布样式一、[GeoServer中使用SLD样式](https://www.cnblogs.com/tuboshu/p/10752292.html)二、分属性渲染三、客户端操作发布图层 掌握使用java api 发布样式一、前置准备二、发布图层三、发布工具类 设计从数据库字段自定义样式一、数据库设计二、业务逻辑分享…

「容器云架构」K8s 多区域部署介绍

背景 Kubernetes的设计使得单个Kubernetes集群可以跨多个故障区域multiple failure zones运行,通常这些区域(zones )位于称为区域(region)的逻辑分组中。主要的云提供商将一个区域定义为一组故障区域 failure zones&am…

Linux高性能服务器编程|阅读笔记:第7章 - Linux服务器程序规范

目录 简介系列笔记7.1 日志7.1.1 Linux系统日志7.1.2 syslog函数7.2 用户信息7.2.1 UID、EUID、GID和EGID7.2.2 切换用户7.3 进程间关系7.3.1 进程组7.3.2 会话7.3.3 用ps命令查看进程关系7.4 系统资源限制7.5 改变工作目录和根目录7.6 服务器程序后台化结语简介 Hello! 非常感…

基于html+css的图展示50

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【UE】高级载具插件-02-坦克开火

1. 添加开火的操作映射 2. 创建一个actor蓝图类,添加一个静态网格体组件 添加发射物移动组件 设置初始速度和最大速度 发射物重力范围设为0.05 添加音频组件 设置音效 3. 打开炮管的静态网格体 在插槽管理器中创建插槽 将创建的插槽放到炮口位置 4. 打开“BP_BaseT…

《物联网安全关键技术白皮书》解读

物联网技术作为物理世界与信息世界融合的具象体现,有效地连接分离的物理世界和信息空间,囊括了传感器网络、通信网络以及互联网,构建物与物互联、人与物互联、人与人互联的协同共生关系,推进了信息产业的新变革,同时也…

南大通用数据库-Gbase-8a-学习-35-rmt(远程导出数据文件)

目录 一、测试环境 二、引入 三、rmt导出流程 四、Linux环境模拟实验 1、不加rmt导出数据 2、加rmt导出数据 一、测试环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2目的端Gbase8a版本8.6.2-R43源…

单词背诵 2023.5.8

preceding dawn sunset segregate restless oblige mature martial vital virtually

PHP+MYSQL——大学生心理健康测试网站源码

一、功能 前台功能: 1、心理百科、心理书籍、心理健康测试 2、用户注册、用户登录、重置密码、退出登录、个人信息修改 3、心理健康测试成绩查看、心理健康状态解决办法 4、预约心理咨询师、预约审批查看 5、留言板 后台功能: 1、后台登录、修改管理员…

【C++】1.语言基础:八股文

心口如一,犹不失为光明磊落丈夫之行也。——梁启超 文章目录 :smirk:1. 语言基础内存分配指针参数传递和引用参数传递四种强制转换面向对象的三大特性并举例#define 和别名 typedef 的区别 :blush:2. 标准库STL介绍频繁调⽤ push_back() 的影响i 和 i 的区别⼤端⼩…

ePWM模块(1)

ePWM模块 ePWM模块内部包含有7个子模块,分别是时间基准子模块TB、比较功能子模块CC,动作限定子模块AQ、死区控制子模块DB、斩波控制子模块PC、事件触发子模块ET和故障捕获子模块TZ。 每个ePWM模块都具有以下功能: 可以输出两路PWM,EPWMxA和EPWMxB两路PWM可以独立输出,也可…

数字座舱带动液晶仪表升级,哪些企业「领跑」前装量产份额

作为人机交互的关键一环,传统汽车机械仪表也在经历数字化、智能化的升级。尤其是整车智能化的升级、电动化的转型,传统仪表存在反应慢、精度低和显示方式单一的缺点,已经不能满足市场要求。 比如,相比于传统机械式仪表&#xff0…

Qt5.9学习笔记-事件(五) 事件调试和排查

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

vue+node.js高校青年志愿者管理系统

1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…

软件设计师内容记载

栈和队列 栈是按照 先进后出或者 后进先出,队列是先进先出 栈只能在栈顶进行插入和删除,栈底不动。 队列是在一端插入,一端删除。 允许插入的是队尾,允许删除的是队头。 循环队列: 队头 队尾:队尾指针指向的…

PXI 国产化测试系统中数据采集与分析软件的设计

数据采集与分析系统需求分析和总体设计 数据采集与分析系统是 PXI 测试系统的上位机软件子系统,在系统中有着重 要的作用。本章将首先简要介绍 PXI 测试系统,分析其整体结构与功能,说明数 据分析系统与 PXI 测试系统的关系&#xff…