首先在进入主题之前咱们先来回顾下经典的大数据ETL架构有哪些?

  1. Lambda架构

  1. Kappa架构

  1. 混合架构

它们之间的区别如下:

七牛的大数据平台在搭建过程中也经验了下面几个架构的变迁,也就是从最早的Lambda架构,到尝试应用Kappa架构,再到前面的新型混合ETL架构,为了满足业务需要,开发人员在这几个架构中进行折中抉择,然而咱们发现下面几个架构对于大数据的开发人员要求较高,次要体现在上面几个方面:

  1. 波及到泛滥的框架,如流解决框架就有晚期的Apache Storm,到前面的Apache Spark Streaming,再到Apache Flink,学习门槛较高
  2. 不同计算框架对与数据源的定义不对立,造成输入输出较难治理
  3. 数据开发人员新开发一个业务指标,不同开发人员写出的代码格调不对立,开发效率低,很难进行工程化,前期保护也必将艰难

为了解决下面的几个问题,团队抉择基于Apache Spark开发了QStreaming这套简略轻量级ETL开发框架

QStreaming个性

数据源反对

  1. Apache Kafka
  2. Apache Hbase
  3. Hadoop HDFS/S3
  4. Jdbc
  5. MongoDB
  6. Apache Hudi

次要个性

  1. DDL定义输出源

这外面stream关键字代表定义了一个流表,并且是连贯到kafka消息中间件

  1. 流解决watermark的DSL反对

在DSL中增加watermark,次要有2种形式:

  • 在DDL中指定,

  • 在create view 语句中指定

  1. 动静UDF

比方上面这个转换一个日期字符串为工夫戳格局

  1. 流解决的多输入

这个个性次要是通过spark structed streaming的forEachBatch实现的

  1. 变量渲染

变量渲染常常在一些定时调度批处理中十分有用,如下依据小时读取一个HDFS上的parquet文件

  1. 监控,如kafka lag监控

因为Apache spark生产kafka是应用的低阶API,默认咱们没有方法晓得生产的topic有没有提早, 咱们通过指定group-id属性,模仿kafka consumer的subscribe模式,这样就和一般的kafka consumer 高级API一样了

  1. 数据品质

这个个性次要是用来对数据做单元测试的,比方校验咱们ETL后果表的准确性

QStreaming残缺的语法个性参考这里

QStreaming架构

 架构图

外围组件

从下面的架构图中能够看出QStreaming次要有以下几个组件组成

  1. Pipeline DSL

Pipeline DSL是一个定义时的Job工作形容文件,相似于SQL语法,对Spark SQL齐全兼容,比方上面这个

  1. Pipeline DSL Parser

Pipeline DSL Parser组件负责解析Pipeline DSL并且转换ANTLR AST为Pipeline Domain Models

Pipeline Domain models

  1. Pipleine Translator

Pipeline Translator进一步将Pipeline domain model转换为spark transformations和actions

  1. Data Quality Checker

Data Quality Check负责解析单元测试语句,应用Amazon Deequ库并且翻译为Deequ的VerificationSuite

  1. Pipeline Runner

这个组件负责构建Pipeline启动上下文,协同PipelineParser和Pipeline Translator一起工作,依据配置启动流或者批处理Application

QStreaming应用场景

  • 场景一

在这一个场景中,QStreaming次要通过生产kafka,而后进行预聚合,预聚合能够进行开窗口计算,比方1分钟的窗口,而后在把窗口聚合的后果写入上游数据存储中,这外面很重要的一个个性就是数据勘误性能,所以能够抉择的ETL架构如下:

  1. lambda架构
  2. kappa架构
  3. 混合架构
  • 场景二

在这个场景中,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