写点什么

如何搭建批流一体大数据分析架构?

  • 2020-05-27
  • 本文字数:4173 字

    阅读完需:约 14 分钟

如何搭建批流一体大数据分析架构?

当提到“实时分析”,大家脑海里首先浮现的是大屏上不断跳跃闪烁的数字和波动的曲线,让人有种纵观全局的掌控感。类似这样的场景多出现在资源监控或是领导驾驶舱大屏展示中,这些都属于“实时分析”中比较简单的应用场景,用于及时了解数据变化。



(酷炫的实时监控大屏)


对于企业来说,不仅要及时观察核心指标的变化,更重要的是了解其变化背后原因。通过对数据展开探索式的分析,获得对业务较为全面的洞察理解,从而为后续的运营决策、营销决策、风控决策等等提供信息支撑。在电商节的促销活动中,电商平台和商家们都密切关注着活动期间实时的交易数据流量。通过实时的分析这些活动流量数据,比如用户活跃率,转化率等关键指标信息,可帮助平台和商家们及时调整相关活动计划策略,从而提升整个活动的营销收入与效益。


从上述业务场景中可以清晰的看到,业务查看数据报告不再是仅局限于实时的数据,而且还希望通过结合历史数据进行更加全面性的探索分析,甚至有些场景下需要两者数据进行相融合分析。想要实现这些时效性更高的业务需求,背后是非常复杂的一系列技术难题,这也就促使了人们开始了对批流一体分析的探索之路。

批流一体架构面临的挑战

传统架构


数据仓库的架构随着业务分析实时化的需求也在不断演进,但在数据分析平台的最初起步阶段,为了满足实时分析需求,传统方案的做法一般都会将实时分析和历史批量数据分析拆分成 2 种不同的独立架构,形成如下图片所示的异构环境:



在这样完全不同的独立异构环境下,不管是从部署架构层面,还是从数据存储介质层面都可以说是完全不一致的,这就使得在技术实现上面临比较大的挑战。


  • 分别维护实时分析与离线分析两套不同架构的服务,对于系统运行的稳定性,后续应用升级,故障处理等都会比较复杂和繁琐;

  • 分别设计、管理实时分析与离线分析两套不同的数据模型,离线分析可以通过关联获取更加丰富的数据,而实时分析为了保障数据时效性能只能是简单的宽表形式进行处理,而且开发流程较繁琐;

  • 因实时数据与离线数据存储介质的割裂,最终导致两者数据在存储时就相互隔离,更无法对两者进行统一的数据周期管理;

  • 在数据服务层中需要根据应用层进行定制化的开发,为不同的应用提供不同的数据服务,同时也使得这个查询服务层的维护成本增加不少。


以上这些限制使开发和运维工作都变得的相当困难,不能灵活地应对业务敏捷多变的取数需求。


Lambda 架构


于是基于这种传统方案的进一步演化,在大数据生态下诞生的 Lambda 架构开始崭露头角。在 Lambda 架构中,数据处理分为 Speed Layer、Batch Layer 和 Serving Layer 三个部分。


  • Speed Layer 负责实时处理数据,计算逻辑直接对接流数据,尽量缩短数据处理的延迟,但由于流数据天生的数据质量不可控,尽管缩短了数据处理时间,但可能牺牲数据的正确性和完整性;

  • Batch Layer 负责批量规模性处理数据,可以保证数据的正确性和处理规模

  • Serving Layer 负责融合 Speed 和 Batch 两个部分的数据能力,对外提供简单一致的数据访问视图。


但在实际应用的过程中,发现 Lambda 架构也存在着一些不足,虽然它使用的是同一架构环境,但是它也同样存在类似传统架构那样较复杂的维护工作。企业需要维护两个复杂的分布式系统,即 Batch Layer 和 Speed Layer,并且保证他们逻辑上产生相同的结果输出到服务层中。



Kappa 架构


因此为了将 Batch Layer 和 Speed Layer 进行统一架构,业界由 Kafka 团队提出了新的 Kappa 架构,基于 Streaming 是新的 DB(数据库)的设计思想,要将所有的数据消费都基于 Kafka,形成统一的数据出口,后续数据处理都基于流式(Kafka)数据源。


这个架构是随着 Kafka 上数据加工能力的提升而受到大家关注(特别是 Flink 框架加持,显著提升流数据处理能力)。Kappa 试图解决多个计算引擎带来的开发、运维难题,只保留实时一套代码和数据。但在实践中,我们发现数据处理的复杂度不完全是一个单向的流式处理可以全部支持的,比如数据模型的演化,历史数据的修补更新,缓慢变化维的处理等等,都需要更灵活的数据建模能力。



基于上述对传统方案、Lambda、Kappa 这些数据架构的讨论,以及企业应用的实际需求,我们认为在数据架构的灵活性、加工逻辑的便捷性、数据模型治理等角度还有更优解。接下来,我们将从批流一体架构这关键部分:数据模型、数据生命周期以及查询服务,进行探讨,为正在进行批流一体选型企业提供一些参考。

基于 Kyligence 的批流一体大数据分析架构探索

基于统一数据模型、生命周期管理、查询服务等批流一体分析中的关键诉求,以及对上述各种方案的探索,最后我们选取基于 Lambda 架构对 Kyligence 产品进行升级,打造出批流一体的企业级产品应用。


数据模型


我们知道数据的分析都离不开模型设计作为基础,模型是数据加工的目标和方法,是数据计算逻辑,也是数据分析的对象。这里我们把模型分为实时模型和历史模型,实时模型为追求数据处理的时效性设计,因此要避免计算逻辑复杂,历史模型为分析的完整性设计,因此需要更丰富的指标含义和数据治理能力。从业务分析的角度上出发,两者之间还是存在共同的特征,两者之间的关系可以用如下图示来总结。



从图上实时模型与历史模型的共同特点分析,两者模型是融合统一的。比如两个模型中的事实表通常都是相同的,可以使用公共的分析维度和指标语义进行数据分析,这就要求批流一体的平台可支持两个模型的统一定义,设计和管理,避免模型重复开发和模型不一致。历史模型是实时模型的超集,历史模型涵盖了实时模型的能力,增强了分析的能力(更多维度、更细的粒度、全局去重指标等)。


由于处理实时和历史数据的计算引擎不同,利用其各自优势,实时模型继续使用流式计算引擎对接流式数据源,历史模型基于大数据平台的并行能力,进行大规模多数据源的融合计算。同时历史模型利用数仓理论中成熟的多维分析方法论,提供缓慢变化维管理、历史数据刷新等能力,增强数据治理。通过对模型定义的统一管理,避免了数据处理逻辑的重复开发,更保证了指标定义的一致性。


数据生命周期


模型统一了,数据还是不同计算引擎加工,不可以允许两份数据共同提供查询服务,会引起服务能力的不一致,典型是数据结果重复。因此还需要解决数据生命周期如何管理。实时数据流与历史数据集,可以说是两条完全平行不相同的数据流,如下图所示:



需要将两份存储进行统一的数据规整,面对不同的分析场景处理方式各有不同。实时数据为保证时效性,会牺牲一定的数据“质量”(原始数据采集质量不可控,数据晚到,缺少数据质量实时修正流程等),这对于一些监控场景是够用的,可以接受“不那么较真”的数据质量;对于分析型的场景来说这样是不可容忍的,需要保证数据的正确性,需要对实时数据进行相应的“修订”才可以和历史数据进行统一的整合。


所以当实时流数据“沉淀”为历史数据时,需要可以有一定的流程进行实时数据的规整和修正,可以通过实时处理修正(数据重放),也可以是通过离线处理修正(一般称为 Enrichment,比如关联更多数据源),这就要求批流一体的平台需要有不同的场景下的数据治理能力,不能简单把实时数据沉淀为历史数据,而要提供多种数据修正的处理能力。


查询服务


SQL 语言是数据分析师最熟悉的查询方式,提供标准的 SQL 语法支持,成为对接数据应用层面尤为关键的一环。过去我们曾采用 HBase、Redis 等多种技术实现查询服务层,甚至要求实时层和历史层采用不同的 API,由应用自行判断合适的查询引擎,这给应用开发带来了更高的门槛。


因此,为了简化服务层接口,需要针对实时分析与历史分析的不同业务场景,自动将查询请求路由到相应的数据集进行检索并返回,同时还需要具备将两者数的查询融合能力,而不是分别从异构系统中取出数据,再在 Data Service 层用笨拙的编码或人工方式进行合并。这也就要求批流一体的平台既要支持实时分析与历史分析的独立查询,也要支持两者数据查询的融合能力。



方案优势


Kyligence 作为大数据领域 OLAP 解决方案的先行者,产品本身支持实时数据与历史数据的多维数据分析能力,而基于此的统一产品架构设计,为后续打造批流一体融合分析架构提供了良好的基础支持。下图便是 Kyligence 产品提供基于全 Spark 计算引擎的批流一体架构设计:



从上面的架构图中可清晰的看到在中心位置上是元数据模型的统一管理,这是批流一体实现中比较关键的部分,然后再结合 Lambda 架构的优势,便能较好的解决我们在前文涉及的那些挑战:


  • 模型统一管理方面:改进实时数据模型过去只能支持单一 Kafka Topic 数据的宽表主题,让其也能和历史模型一样,并共享相同的维度表数据,可实现标准星型和雪花模型设计,从而也实现了对模型的统一设计管理;

  • 数据生命周期方面:借助于 Lambda 架构优势,将实时与历史数据处理分开并行进行处理,这样的设计不仅很好的保护已有的历史数据资产不做变更或以较小的代价改动,而且能够使用历史数据对实时不满足的地方进行修正并覆盖,对于监控类或其他“低数据质量”要求的场景也可以直接将实时数据沉淀为“历史”数据。为不同的应用场景提供更加灵活的数据生命周期管理;

  • 统一查询服务方面:开发智能的查询路由作为查询服务统一查询入口,支持标准的 ANSI SQL 语法,通过对元数据模型的识别,可分别对实时数据集与历史数据集进行探测并解析,返回查询请求所预期的数据结果,同时以超快的响应速度支持。


在整个“实时”业务支持与实现过程中,对比其它架构中企业需要运维底层复杂的基础架构,以及在实现流程上繁琐的代码开发工作来说,企业现在只需要其上面进行模型设计与管理,以及数据生命周期定义的操作,极大地提升了工作效率,同时减轻了运维工作负担和成本投入。

小结

基于 Lambda 架构升级改造后的 Kyligence 批流一体分析融合架构,不仅解决批流一体中关键部分的支持,同时结合 Kyligence 的其它优势,整套方案可更便捷地在企业落地。例如图形界面化的友好操作、支持 Hive 和 Kafka 两种数据源、无缝集成主流的 BI 平台等。


目前,我们正将这套方案应用于一家大型金融机构的数据平台中。对于批流一体的最优解,我们在实践中不断探索和迭代。后续,我们将陆续发布文章,总结项目中的最佳实践。如果想了解更多批流一体方案的进展,请关注我们的公众号。


作者简介


李森辉,Kyligence 解决方案架构师,拥有丰富的软件开发与架构设计经验,熟悉大数据数仓平台建设,目前主要负责金融行业类的大数据数仓平台解决方案设计。


2020-05-27 18:164589

评论

发布
暂无评论
发现更多内容

菜单栏应用管理:Bartender 4 激活中文版

真大的脸盆

Mac Mac 软件 菜单栏管理工具 菜单栏软件

一文盘点PoseiSwap近期的生态利好

西柚子

Django笔记三十四之分页操作

Hunter熊

Python django 分页

使用 OpenAPI 构建 API 文档

江湖十年

golang Web 后端 swagger OpenAPI

三周年主题征文活动结果已出炉,快来看看有没有你

InfoQ写作社区官方

热门活动 三周年征文

C语言编程—存储知识

芯动大师

深度学习基础入门篇[8]::计算机视觉与卷积神经网络、卷积模型CNN综述、池化讲解、CNN参数计算

汀丶人工智能

人工智能 深度学习 计算机视觉 池化 CNN网络

国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?

福大大架构师每日一题

福大大 ChatGPT 文心一言

如何在Mac上运行Windows游戏?CrossOver是您不错选择!

理理

Mac虚拟机 如何在Mac上运行win游戏 crossover mac 破解版

9款好用的项目工时软件推荐

爱吃小舅的鱼

项目管理 工时管理

开源字节 CRM 系统

源字节1号

开源 软件开发 小程序开发

mac端好用的建模软件分享~

真大的脸盆

Mac Mac 软件 建模工具 三维建模软件

fcpx标记功能如何使用?fcpx标记快捷键有哪些?

理理

Final Cut Pro破解版 Final Cut Pro教程 fcpx标记功能 Mac视频剪辑软件

如何列举测试点

FunTester

轻松建模、编辑、分析尽在Rhino 7中文激活版~

真大的脸盆

Mac 3D Mac 软件 建模软件 3d建模

一文读懂大语言模型

俞凡

人工智能

Ribbon默认负载均衡规则替换为NacosRule

越长大越悲伤

Spring Cloud

三周年连更活动结果已出炉,快来看看有没有你

InfoQ写作社区官方

热门活动 三周年连更

lut调色预设怎么安装,LUT预设导入FCPX/PR/AE/PS/LR/达芬奇等软件教程

理理

lut调色预设 luts预设导入教程 lut调色预设怎么安装

我出版了一本关于TikTok电商运营的书

博文视点Broadview

HashTable 在蚂蚁转化归因中的极致运用

阿里云大数据AI技术

大数据 开发者 企业号 5 月 PK 榜

如何通过Makefile优化加速编译过程提高开发效率

小万哥

c++ 程序员 面试 后端 开发

面试复盘:哈希冲突的常见解决方案?

javacn.site

Cornerstone如何连接到 HTTP和SVN服务器?

理理

svn HTTP cornerstone 4破解 Cornerstone使用教程 Cornerstone永久激活版

如何修复“无法打开应用,因为Apple无法检查其是否包含恶意软件“

理理

Mac应用程序无法打开 mac教程 苹果软件下载

一文盘点PoseiSwap近期的生态利好

股市老人

如何借助Kafka持久化存储K8S事件数据?

SEAL安全

kafka 云原生 k8s Seal软件 企业号 5 月 PK 榜

2023-05-21:给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个, 并把它加到字符串的末尾。 返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串。 输入:s

福大大架构师每日一题

Go 算法 福大大

建造者模式:将对象的构建与表示分离,提高程序的可维护性和可扩展性

Jack

golang 设计模式

From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了

Seachal

Java android Lambda kotlin 函数式编程

如何搭建批流一体大数据分析架构?_大数据_apachekylin_InfoQ精选文章