首先在进入主题之前咱们先来回顾下经典的大数据ETL架构有哪些?
- Lambda架构
- Kappa架构
- 混合架构
它们之间的区别如下:
七牛的大数据平台在搭建过程中也经验了下面几个架构的变迁,也就是从最早的Lambda架构,到尝试应用Kappa架构,再到前面的新型混合ETL架构,为了满足业务需要,开发人员在这几个架构中进行折中抉择,然而咱们发现下面几个架构对于大数据的开发人员要求较高,次要体现在上面几个方面:
- 波及到泛滥的框架,如流解决框架就有晚期的Apache Storm,到前面的Apache Spark Streaming,再到Apache Flink,学习门槛较高
- 不同计算框架对与数据源的定义不对立,造成输入输出较难治理
- 数据开发人员新开发一个业务指标,不同开发人员写出的代码格调不对立,开发效率低,很难进行工程化,前期保护也必将艰难
为了解决下面的几个问题,团队抉择基于Apache Spark开发了QStreaming这套简略轻量级ETL开发框架
QStreaming个性
数据源反对
- Apache Kafka
- Apache Hbase
- Hadoop HDFS/S3
- Jdbc
- MongoDB
- Apache Hudi
次要个性
- DDL定义输出源
这外面stream关键字代表定义了一个流表,并且是连贯到kafka消息中间件
- 流解决watermark的DSL反对
在DSL中增加watermark,次要有2种形式:
- 在DDL中指定,
- 在create view 语句中指定
- 动静UDF
比方上面这个转换一个日期字符串为工夫戳格局
- 流解决的多输入
这个个性次要是通过spark structed streaming的forEachBatch实现的
- 变量渲染
变量渲染常常在一些定时调度批处理中十分有用,如下依据小时读取一个HDFS上的parquet文件
- 监控,如kafka lag监控
因为Apache spark生产kafka是应用的低阶API,默认咱们没有方法晓得生产的topic有没有提早, 咱们通过指定group-id属性,模仿kafka consumer的subscribe模式,这样就和一般的kafka consumer 高级API一样了
- 数据品质
这个个性次要是用来对数据做单元测试的,比方校验咱们ETL后果表的准确性
QStreaming残缺的语法个性参考这里
QStreaming架构
架构图
外围组件
从下面的架构图中能够看出QStreaming次要有以下几个组件组成
- Pipeline DSL
Pipeline DSL是一个定义时的Job工作形容文件,相似于SQL语法,对Spark SQL齐全兼容,比方上面这个
- Pipeline DSL Parser
Pipeline DSL Parser组件负责解析Pipeline DSL并且转换ANTLR AST为Pipeline Domain Models
Pipeline Domain models
- Pipleine Translator
Pipeline Translator进一步将Pipeline domain model转换为spark transformations和actions
- Data Quality Checker
Data Quality Check负责解析单元测试语句,应用Amazon Deequ库并且翻译为Deequ的VerificationSuite
- Pipeline Runner
这个组件负责构建Pipeline启动上下文,协同PipelineParser和Pipeline Translator一起工作,依据配置启动流或者批处理Application
QStreaming应用场景
- 场景一
在这一个场景中,QStreaming次要通过生产kafka,而后进行预聚合,预聚合能够进行开窗口计算,比方1分钟的窗口,而后在把窗口聚合的后果写入上游数据存储中,这外面很重要的一个个性就是数据勘误性能,所以能够抉择的ETL架构如下:
- lambda架构
- kappa架构
- 混合架构
- 场景二
在这个场景中,QStreaming表演了一层很薄的角色,比方对数据进行加工,然而不对数据进行聚合,保留了显著,预聚合的性能交给了上游反对OLAP引擎,比方反对RollUp性能的Apache Druid,Apache Doris,Clickhouse等,另外Apache Doris还能够保留明细性能
- 场景三
在这个场景中,QStreaming次要是通过Apache Airflow进行调度的,ODS对接Apache Hive数据仓库,而后能够做DWS或者是DWD操作,再把后果写入Hive数据仓库中,提供离线即席查问,或者是聚合的后果写入RDS,NOSQL等数据库,下层对其后果封装为API,供用户应用
- 场景四
这个场景次要是音讯驱动的,通过上游业务方发送音讯到消息中间件,而后生产音讯驱动QStreaming ETL工作
QStreaming总结
整体上QStreaming能够从上面3个图简略详情:
- 架构层面
可用于上面三种架构中,灵便切换
- 开发层面
- 运维层面
QStreaming RoadMap
QStreaming还十分年老,前期还会有进一步的布局,布局的个性如下:
欠缺数据源反对(如Delta lake,Apache Hudi等)
增加数据血统性能
机器学习Pipeline