首先在进入主题之前咱们先来回顾下经典的大数据 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