前言:技术是为了需求服务。技术的第一性原则是解决问题,不同的技术方案都能实现同样的需求,那在公司原有技术架构上,如何设计技术架构,尽量用最少的大数据组件解决多种应用场景问题。分析分为实事状态分析和预测分析(特征工程),本文用对事实状态指标分析为例,用多种技术方案构建指标分析系统。
1.大数据的指标分析场景:从主机往上分析,有机器的性能指标、中间件的应用指标、业务应用指标、业务指标;其中前三个和安全生产管理、监控、运维相关;业务指标和运营、决策分析相关;面向业务指标是主要的、可操作数据的分析系统。
2.数据分析阶段:数据分析系统会经过数据采集、数据处理、指标计算、结果应用四个阶段。
3.数据样式:数据的样式有OLTP数据库的结构化数据(ER模型或大宽表);日志等半结构化数据。
4.指标计算思考:分析和计算是两件事,业务要评估是需要分析挖掘还是实事呈现;数据分析和指标计算在技术层面没有强因果联系,但是定式思维导致在构建局部指标需求的时候,往往先构建分析模型(ODS和DWD),再依据DIM层构建DWS到OPS层的计算;这种方式带着传统OLTP计算方式的特征;数据分析阶段,到宽表之前,都是为了指标分析构建数据模型,换句话说,最优方式构建好宽表模型,指标就能很快的计算出来;分析不一定要放到技术层,也可以放到业务构建时。
以下从ER模型的结构化数据和日志非结构数据两种场景构建指标分析系统。
方案一(离线分析报表):数据采集+数据处理+数仓分析+数据呈现
例如:datax采集数据库、Flume采集文件+Spark数据处理(标准化)+hive数仓分析+mysql和后端做数据结构展示嵌入web;
市场上第一版用于数据分析的技术架构方案,数据采集源是通过集成插件将OLTP结构化数据库或非结构日志采集到HDFS上,存储为文件系统,通过spark数据处理成标准数据,然后hive数仓安装指标要求,构建数据模型,计算指标,将指标同步到高qps的中间件应用。
优点:存储数据量大,业务分析性能稳定。
弊端:模型构建复杂、处理链路长,详细数据难以呈现。
方案二(离线分析报表改进):SDK事件模型采集+纬度关联+纬度统计和结果呈现
例如1:SDK事件模型数据采集(存入Kafka)+不定义scheme的存储组建(ES)+Redis数据阔维+DSL计算,结果存入Mysql+取数API读取指标数据
例如2:SDK事件模型数据采集(存入Kafka)+定义sheme的存储组件(Doris)+DIm中间纬度表+Doris自带引擎计算纬度指标结果+取数API读取指标数据。(相比例如1,存在scheme定义和阔维处理区别)
优点:指标计算简单,详情即席查询;
缺点:依赖OLAP分析组件自身的性能,存储计算能力和QPS的性能。
大数据现有分析技术主要是数仓分析(离线和实事数仓),数仓分析是一套标准的方法论,对标传统计算机语言的计算逻辑,依靠层级关系将最终指标结果分析出来,在处理过程中,会生成一张描述事件的宽表,然后在宽表之上计算指标数据;如何生成宽表,在业务系统中存在多种方式,可以自定义OLTP事件描述宽表,将多种ER表和机器语言内部关联逻辑具象成最终结果,大数据集成只需要拉取最终结果表;或者在业务系统内部埋点,将事件关系描述生成一条数据存入kafka类似队列;然后关联事件纬度,就可以使用大数据存储分析能力产出报表。
方案三(实时分析报表):采集到数据管道+实事窗口或状态粗加工计算+存储引擎细加工(纬度统计计算和高QPS特性)数据API支持。
例如1:Kafka+Flink和Redis数据加工+ES存储大宽表+ES引擎和自身的RestApi提供Web指统计标数据;
例如2:Kafka数据缓存+Flink和Redis数据加工+CLickHouse大宽表存+依赖CK引擎的数据API纬度统计结果呈现;
例如3:Kafka等队列中间件缓存数据+FLink窗口或状态特性计算结果+Mysql存储结果数据,数据API呈现指标结果;
例如4:FLinkCdc或kafka等定时将结果同步到Doris+Doris引擎和定时调度触发快速计算(MPP)(低频使用)+数据Api呈现计算结果(即席查询特性)
大数据实时数据分析有多种技术方案,技术选项参考公司的技术栈和团队技术能力深浅。有存组件的技术方式,如CK、Hbase和Doris/starRocks,只需要数据标准化后打通数据管道,依赖组件自己的引擎计算能力;也可以通过灵活的计算引擎,开大窗口,利用内置状态,实事更新指标存储到外部中间件,如FLink+Redis或Mysql等高QPS的中间件;也可以综合使用,预计算后再依赖中间件最终聚合得出结果,如,可以把计算窗口调小一点,放弃状态管理,将阶段计算结果输出到中间件,再计算最终结果。
大数据指标系统是一个集:数据采集、数据处理、指标计算、结果呈现的周期;多个阶段是一个生命整体,如何高效、稳定、有效的输出报表,可以在周期任何一个阶段做优化。
指标分析最理想的状态是:业务端采集的就是宽表核心数据,数据直接写入存储系统,做简单处理,依靠宽表做指标统计,结果直接呈现。想实现理想状态,需要以存储系统的读写性能为基础,以宽表构建为关联核心,任务调度系统做辅助;在业务侧做好宽表处理,依赖高性能OLAP大数据组件做数据存储能力建设,计算下沉或上移得到指标结果,组件自身的数据API提供报表数据支撑。离线和实事报表都可以基于这套方式构建,实时报可以将计算放到落库之前FLink和kafka中,离线报表指标可以增加一个中间件,依赖机器语言或者数据迁移插件存储到mysql这类高QPS的中间件中。