构建实时数据仓库:流式处理与实时计算技术解析

目录

一、流式处理

请求与响应

批处理

二、实时计算

三、Lambda架构

Lambda架构的缺点

四、Kappa架构

五、实时数据仓库解决方案


近年来随着业务领域的不断拓展,尤其像互联网、无线终端APP等行业应用的激增,产生的数据量呈指数级增长,对海量数据的处理需求也提出了新的挑战。具体到数据仓库,尤其突出的一点是人们对数据分析的实时性要求越来越高,从而衍生出所谓实时数据仓库的概念。为解决数据实时性问题,也涌现出一批相关的技术。

本文将解释什么是流式处理,然后讨论实时计算的基本概念和适用场景,它们都与实时数据仓库的实施密不可分。最后从技术实现的角度介绍几种流行的实时数据仓库架构。

一、流式处理

流式处理,顾名思义,是一种处理数据流的技术。与传统的批处理方式不同,流式处理不是等待一大批数据积累完毕再进行处理,而是实时处理数据流中的每一条信息。这种方法使得系统能够即时响应变化,进行实时决策。

人们对数据流并不陌生,数据从业务系统产生,经过一系列转换进入数据仓库,再进入分析系统提供报表、仪表盘展现分析结果,最终经过数据挖掘和机器学习以辅助决策,整个过程就形成了一个数据流。当然除了直觉以外,严格的定义更有意义。数据流是无边界数据集的抽象表示。无边界意味着无限和持续增长,无边界数据集之所以是无限的,是因为随着时间的推移,新的记录会不断加入进来。这个定义已经被包括Google和Amazon在内的大部分公司所采纳。

除无边界外,数据流还有其它一些属性:有序、不可变、可重放。数据的产生总有先后顺序,这是数据流与数据库表的不同点之一,数据库表里的记录是无序的。数据一旦产生就不能被改变。假设你熟悉数据库的二进制日志(binlog)、预写日志(Write Ahead Log,WAL)和重做日志(redo log)的概念,那么就会知道,如果往数据库表插入一条记录,然后将其删除,表里就不会再有这条记录,但日志里包含了插入和删除两个事务。可重放是数据流非常有价值的一个属性。对于大多数业务来说,重放发生在几天前(甚至几个月前)的原始数据流是一个很重的需求。可能是为了尝试使用新的分析方法纠正过去的错误,或是为了进行审计。

知道什么是数据流以后,是时候了解“流式处理”的真正含义了。流式处理是指实时处理一个或多个数据流。流式处理是一种编程范式,就像请求与响应范式和批处理范式那样。下面对这三种范式进行比较,以便更好地理解如何在软件架构中应用流式处理。

请求与响应

这是延迟最小的一种范式,响应时间处于亚毫秒到毫秒之间,而且响应时间一般非常稳定。这种处理方式一般是阻塞的,应用程序向处理系统发出请求,然后等待响应。在数据库领域,这种范式就是联机事务处理(OLTP)。

批处理

这种范式具有高延迟和高吞吐量的特点。处理系统按照预定的时间启动处理进程,比如每天凌晨两点开始启动,每小时启动一次等。它读取所有的输入数据(从上一次执行之后的所有可用数据),输出结果,然后等待下一次启动。处理时间从几分钟到几小时不等,并且用户从结果里读到的都是滞后数据。在数据库领域,它们就是传统的数据仓库或商业智能系统。它们每天装载巨大批次的数据,并生成报表,用户在下一次装载数据之前看到的都是相同的报表。从规模上来说,这种范式既高效又经济。但在近几年,为了能够更及时、高效地做出决策,业务要求在更短的时间内能够提供可用数据。这就给那些为探索规模经济而开发却无法提供低延迟报表的系统带来了巨大的压力。

流式处理介于上述两种之间。某些业务不要求毫秒级的响应,不过也接受不了要等到第二天才知道结果。大部分业务流程都是持续进行的,只要业务报告保持更新,业务产品线更够保持响应,那么业务流程就可以进行下去,而无需等待特定的响应,也不要求在几毫秒内得到响应。

流式处理的整个处理过程必须是持续的。一个在每天凌晨两点启动的流程,从流里读取500条记录,生成结果,然后结束,这样的流程不是流式处理。对数据仓库来说,也许从粒度的角度理解流式处理更容易。

二、实时计算

要做到实时读写数据,必须采用有别于传统数据仓库的实现技术,实时计算的概念和技术引擎应运而生,它们是成功创建实时数据仓库的前提条件。实时计算一般针对海量数据处理,并且要求响应时间为秒级。由于大数据兴起之初,以Hadoop为代表的分布式框架并没有给出实时计算解决方案,随后便出现了Storm、Spark Streaming、Flink等实时计算框架,而Kafka、ES的兴起使得实时计算领域的技术越来越完善,而随着物联网、机器学习等技术的推广,实时流式计算将在这些领域得到充分应用。实时计算是流式处理的一种具体实现方式,因此必然具有无限数据、无界数据处理、低延迟等特征。

现在大数据应用比较火爆的领域,比如推荐系统在实践之初受技术所限,可能要一分钟、一小时、甚至更久才能对用户进行推荐,这远远不能满足需要,我们需要更快的完成对数据的处理,而不是进行离线的批处理。实时计算的应用场景主要包括实时智能推荐、实时欺诈检测、舆情分析、物联网、客服系统、实时机器学习等。

在某些场景中,数据的价值随着时间的推移而逐渐减少。所以在传统数据仓库的基础上,逐渐对数据的实时性提出了更高的要求。于是随之诞生了实时数据仓库,并且衍生出了两种主流技术架构:Lambda和Kappa。

三、Lambda架构

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

在Lambda架构中,每层都有自己所肩负的任务。批处理层使用可处理大量数据的分布式处理系统预先计算结果。它通过处理所有的已有历史数据来实现数据的准确性。这意味着它是基于完整的数据集来重新计算的,能够修复任何错误,然后更新现有的数据视图。输出通常存储在只读数据库中,更新则采用全量替换方式,完全取代现有的预先计算好的视图。流处理层通过提供最新数据的实时视图来最小化延迟。流处理层所生成的数据视图可能不如批处理层最终生成的视图那样准确或完整,但它们几乎在收到数据后立即可用。而当同样的数据在批处理层处理完成后,在速度层的数据就可以被替代掉了。

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

Lambda架构的缺点

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

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

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

资源占用增多:同样的逻辑计算两次,整体资源占用会增多(多出实时计算这部分)。

导致Lambda 架构的缺点根本原因是要同时维护两套系统:批处理层和速度层。我们已经知道,在架构中加入批处理层是因为从批处理层得到的结果具有高准确性,而加入速度层是因为它在处理大规模数据时具有低延时性。那我们能不能改进其中某一层的架构,让它具有另外一层架构的特性呢?例如,改进批处理层的系统让它具有更低的延迟,又或者是改进速度层的系统,让它产生的数据视图更具准确性和更加接近历史数据呢?另外一种在大规模数据处理中常用的架构——Kappa,便是在这样的思考下诞生的。

四、Kappa架构

Kappa架构可以被认为是Lambda架构的简化版,只是去除掉了Lambda架构中的离线批处理部分。

这种架构只关注流式计算,数据以流的方式被采集,实时计算引擎将计算结果放入数据服务层以供查询。Kappa架构的兴起主要有两个原因:

消息队列(如Kafka)支持数据持久化,可以保存更长时间的历史数据,以替代Lambda架构中批处理层数据仓库部分。流处理引擎以一个更早的时间作为起点开始消费,起到了批处理的作用。

流处理引擎解(如Flink)决了事件乱序下计算结果的准确性问题。

Kappa架构相对更简单,实时性更好,所需的计算资源远小于Lambda架构,最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。随着实时处理的需求在不断增长,更多的企业开始使用Kappa架构,但这不意味着Kappa架构能够取代Lambda架构。Lambda和Kappa架构都有各自的适用领域,对于流处理与批处理分析流程比较统一,且允许一定的容错,用Kappa比较合适,少量关键指标,例如交易金额、业绩统计等使用Lambda架构进行批量计算,增加一次校对过程。还有一些比较复杂的场景,批处理与流处理产生不同的结果,如使用不同的机器学习模型、专家系统,或者实时计算难以处理的复杂计算,可能更适合Lambda架构。

五、实时数据仓库解决方案

从传统的经验来讲,数据仓库有一个很重要的功能是记录数据变化历史。通常,数据仓库都希望从业务上线的第一天开始有数据,然后一直记录到现在。但实时处理技术,又是强调当前处理状态的一门技术,所以当这两个相对对立的方案重叠在一起的时候,它注定不是用来解决一个比较广泛问题的方案。于是,我们把实时数据仓库建设的目的定位为解决由于传统数据仓库数据时效性低解决不了的问题。

实时数据仓库也引入了类似于离线数据仓库的分层理念,主要是为了提高模型的复用率,同时兼顾易用性、一致性以及计算成本。通常离线数据仓库采用空间换取时间的方式,所以层级划分比较多从而提高数据计算效率。实时数据仓库的分层架构在设计上考虑到时效性问题,分层设计尽量精简,避免数据在流转过程中造成的不必要的延迟响应,并降低中间流程出错的可能性。

构建实时数仓需要根据业务需求选择合适的技术架构,并通过ETL工具来实现数据的实时采集、处理和分析,最终将结果存储到实时数据仓库中,并进行数据可视化和应用开发。

帆软软件推出的FineDataLink提供了一套完整而灵活的解决方案,可以帮助用户快速构建可靠的高时效/近实时数据仓库系统。在构建高时效/近实时数据仓库时,帆软FDL有以下优势:

1. 操作界面简洁清晰,无代码配置,字段自动映射,无需专业的编程能力即可完成任务配置。

2. 提供统一的错误队列管理、预警机制、日志管理,支持脏数据阈值设置通知功能,可通过短信、邮件、平台消息等进行消息提醒,保证企业敏感数据的安全性。

3. 打破数据壁垒,实现低成本业务系统的数据实时同步,从多个业务数据库实时捕获源数据库的变化并毫秒内更新到目的数据库。

综上所述,数仓建设是企业数据管理和决策支持的关键环节,在实践中,企业需要根据自身业务需求和数据规模,选择合适的数仓建设方案和技术方案,以提高企业数据资产的价值和利用效率。

FineDataLink——小到数据库对接、API对接、行列转换、参数设置,大到任务调度、运维监控、实时数据同步、数据服务API分享,另外它可以满足数据实时同步的场景,应有尽有,功能很强大。如果您需要进行实时数仓建设,帆软FDL会是您的最优解。

免费试用、获取更多信息,点击了解更多>>>体验FDL功能

了解更多数据仓库与数据集成关干货内容请关注>>>FineDataLink官网

往期推荐:

代表性大数据技术:Hadoop、Spark与Flink的框架演进-CSDN博客

【大数据】什么是数据架构?-CSDN博客

什么是流批一体?怎样理解流批一体?_流批一体计算框架技术-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端开发攻略---彻底弄懂跨域解决方案

目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…

计算机毕业设计选什么题目好? springboot java沉浸式戏曲文化体验系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

【生物特征识别论文分享】基于深度学习的掌纹掌静脉识别

(待更新)基于深度学习的生物特征识别(手掌静脉、手背静脉、手指静脉、掌纹、人脸等)论文模型总结 。具体方法包括:基于特征表征、基于传统网络设计与优化、基于轻量级网络设计与优化、基于Transformer设计与优化、基于…

ES与MySQL数据同步实现方式

1.什么是数据同步: 1.Elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,Elasticsearch也必须跟着改变,这个就是Elasticsearch与mysql之间的数据同步 2.数据同步实现方式: 常见的数据同步方案有三种&#x…

7.2 算法设计与分析

分治法(考的概率较低) 回溯法(考的概率较低) 动态规划法(考的概率较高) 1

Python 办公自动化 处理 Excel 数据 【1】推荐

话说学好办公自动化,走遍天下都不怕!!! 好的,现在开始。 因为是一些办公自动化的应用场景,所以需要电脑支持excel、word和ppt以及python的运行环境。 如果有电脑不支持Excel word ppt的以及python环境下载安装配置可…

交通感知与车路协同系统-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

QT:事件机制

一、事件机制 qt的核心机制:对象树、信号和槽、事件机制 1.1概念 就是当这件事情发生时,自动执行对应的功能代码。该某块功能代码是虚函数,只需重写该虚函数,即可执行重写的代码。 1.2事件处理简介 1. 什么是事件? (重…

【教学类-76-01】20240820书包01(图案最大化)

背景需求 通义万相生成图片,把图案最大化的方法(切掉白边) 【教学类-75-01】20240817“通义万相图片最大化透明png”的修图流程-CSDN博客文章浏览阅读1.6k次,点赞56次,收藏17次。【教学类-75-01】20240817“通义万相…

【Android 笔记】记移植OpenCV4.8图像人脸识别

前言 因业务需要,使用大屏端摄像头捕获图像,且要识别图像中人脸的数目以及从中随机抽取一人。 业务流程如下,调用摄像头预览、拍照,使用OpenCV库进行人脸识别,将识别到的人脸使用矩形框绘制出来,从识别的人…

【秋招笔试】8.18大疆秋招(第三套)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

STM32CubeMX 配置串口通信 HAL库

一、STM32CubeMX 配置串口 每个外设生成独立的 ’.c/.h’ 文件 不勾&#xff1a;所有初始化代码都生成在 main.c 勾选&#xff1a;初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。 二、重写fputc函数 ​ #include <stdio.h>#ifdef __GNUC__#def…

无人机之固定翼无人机的组成

固定翼无人机是根据空气动力学原理设计机翼的形状&#xff0c;靠动力装置产生推力或者拉力&#xff0c;使无人机获得一定速度后&#xff0c;会导致空气在飞机上下表面的压力不同&#xff0c;进而产生升力&#xff0c;其升力主要来源于固定的机翼。大多数都是由机翼、机身、尾翼…

FastHTML:使用 Python 彻底改变 Web 开发

什么是 FastHTML&#xff1f;&#x1f310; FastHTML 是一个现代 Python Web 应用程序框架&#xff0c;其真正目的是让 Python 开发人员轻松进行 Web 开发。它大大减少了对 JavaScript 和 CSS 构建交互式和可扩展 Web 应用程序的依赖。FastHTML 通过使用 Python 对象来表示 HTM…

python 捕获异常

捕获指定异常 e 是保存的异常信息 捕获多个异常

全国大学生数学建模比赛——时间序列(详细解读)

全国大学生数学建模比赛中&#xff0c;时间序列分析是一种重要的方法。以下是对时间序列在该比赛中的详细解读&#xff1a; 一、时间序列的概念 时间序列是按时间顺序排列的一组数据。在数学建模中&#xff0c;时间序列数据通常反映了某个现象随时间的变化情况。例如&#xf…

使用vs配置opencv环境(属性表方法)

opencv官网&#xff1a;https://opencv.org/releases/ 老手回忆&#xff08;新建属性表&#xff09; Step1: 安装VS&#xff0c;安装openCV Step2: 新建项目&#xff0c;新建项目属性表&#xff0c;debug|x64新建属性&#xff0c;命好名字 Step3: VC目录-包含目录中添加: 安装…

经典游戏,用java实现的坦克大战小游戏

今天给大家分享一个使用java编写的坦克大战小游戏&#xff0c;整体还是挺好玩的&#xff0c;通过对这款游戏的简单实现&#xff0c;加深对java基础的深刻理解。 一、设计思路 1.坦克大战小游戏通过java实现&#xff0c;其第一步需要先绘制每一关对应的地图&#xff0c;地图包括…

WPF中RenderTransform,LayoutTransform区别

RenderTransform RenderTransform 是在渲染阶段应用的变换。它不会影响控件的布局&#xff0c;只会影响控件的外观。常用于动画和视觉效果。 • 应用时机&#xff1a;在控件已经完成布局之后。 • 影响范围&#xff1a;仅影响控件的外观&#xff0c;不影响布局。 • 常见用途&…

探索 HarmonyOS 的层叠布局:灵活的 Stack 容器

在应用开发中&#xff0c;灵活的布局设计是提高用户体验的关键之一。HarmonyOS 提供了丰富的布局组件&#xff0c;其中层叠布局&#xff08;Stack Layout&#xff09;是一个强大的工具&#xff0c;可以帮助开发者轻松实现元素的重叠显示。本文将深入探讨 Stack 容器的功能和应用…