作者:瑞丹
背景
每当双11全球购物狂欢节钟声响起,上千万用户涌入阿里平台,流畅而宏伟的购物体验背后是上千个阿里工程师用技术打造出的营地,支撑了每年双11所带来的数据洪峰。11月1日至11月12日0:00,天猫“双11”累计总交易额达4982亿元,同比增长26%。450个品牌成交额过亿,105个产业带成交额过1亿元,物流订单总量达到23.21亿单。这一切的背后都离不开实时计算技术。
Dataphin作为一款企业级智能数据构建与管理产品,具备全链路实时研发能力,从2019年开始支撑了集团内部天猫双11的实时计算需求。今天我们就来介绍一下Dataphin实时计算的强大能力。
传统的数仓架构
在数仓建设过程中,一般来说都是先建设离线数仓,同时围绕着离线数据所构建的应用,然后随着业务的发展或者体验的优化,再建设实时的链路去提升数据的时效性,那么在这个过程中就难免会出现相似的代码写两遍,实时和离线口径不一致等各种各样的问题,同时分别维护的成本也会增加。
传统的数仓架构流与批从存储计算的分离带来一下的问题:
- 效率问题:流批底层数据模型不一致,导致应用层做大量的拼接逻辑(同比、环比、二次加工等),搭建效率低且容易出错
- 质量问题:一个业务逻辑,两个引擎两套代码,SQL逻辑不能复用,数据一致性和质量问题难以保证
- 成本问题:
- 流批存储系统隔离(面向不同写入场景),提供的数据服务不一,维护成本高
- 手工建数据同步任务,开发成本/存储成本高(两份)
- 批处理&流处理集群无法做到错峰,资源利用率低
Dataphin流批一体优势
为解决传统数仓架构的存储计算分离的问题,有了“流批一体”的思路:
- 流批存储透明化,查询逻辑完全一致,应用端接入成本大幅降低,点查/OLAP分析统一支持
- 服务层统一存储,无需手工同步,无重复存储
- 一套代码,两种计算模式,逻辑统一,灵活切换,研发效率大幅提升
- 流批计算资源混部,资源利用率提升
Dataphin在Flink流批一体的能力之上额外提供了更多的平台能力,如数据源管理、元数据管理、资产血缘、资产质量控制、预编译、调试等能力:
- 开发生产隔离:提供开发环境和生产环境隔离,保证开发环境开发的业务代码和生产相互之间不干扰
- 元数据管理:各系统组件包括数据源、元表、UDX等具备权限控制功能,敏感型配置信息加密保护。支持数据源敏感字段访问订阅。元表、函数、资源等全部单元化可视化的管理,支持跨项目鉴权(字段级)调用,让使用者聚焦业务逻辑。
- 流批一体:流批存储层的统一管理,实现模型层统一,流批代码统一、通过流批各自专属配置,生产独立有协同的额调度实例
- 研发提效:
- 提供了预编译的能力,提供语法校验、权限校验、字段血缘提取的功能;
- 容器化调试,支持上传自定义数据或直接消费真实生产数据用来观察作业运行、检查各个节点的输出结果
- 支持元数据检索,作业依赖、字段血缘的可视化探查
- 稳定性及质量保障:
- 支持流量阈值设置,防止计算资源过度竞争,避免下游系统过载
- 支持实时元表质量监测,可配置统计趋势监测、实时多链路对比、实时离线数据核对。
开发生产隔离
Dataphin支持开发生产隔离的项目,支持开发和生产双环境的数据源配置。这样在开发模式下,任务就会自动使用开发数据源和开发环境下的物理表;而当发布到生产环境时,Datpahin则会自动切换为生产数据源及生产环境的物理表。这个过程完全自动化,不用手动修改代码或配置。
元数据管理
Dataphin创造性的引入了实时元表和镜像表的概念,将实时研发过程中的表进行了平台化、资产化的统一管理,并简化了研发,提升研发效率和体验。
传统实时任务研发工具需要用户重复写Create table建表语句,需要进行繁琐的输入输出表映射等操作。实时元表将实时开发任务中所有用到的数据表进行了统一表构建与管理,统一维护了所有实时元表和相关schema信息。开发者在开发过程中不用重复写DDL语句;同时,也不需要进行繁杂的输入、输出、维表映射,采用简单的纯代码研发模式,简单的SET语句及权限申请,即可引用表数据,进行直接查询或写入数据,轻松做到一次建表,多次引用,大幅度提升研发效率和体验。
镜像表顾名思义则是用于维护离线表与实时表之间字段的映射关系。创建镜像表并提交发布后,就可以在流批一体的Flink任务中使用镜像表的字段,Datpahin会在编译时自动映射到流表和批表上,实现一份代码,两种计算,代码逻辑、口径变更强一致。
流批一体的代码任务
除了引入实时元表与镜像表,Dataphin也支持了流批一体的任务,使用Flink引擎作为统一的流批计算引擎,在一份代码上可同时配置流+批的任务配置,基于同一份代码生成不同模式下的实例。而对于流批差异化的代码,Dataphin也提供了不同的方式给与支持。
流批一体任务中会广泛使用镜像表,而镜像表在最终使用时会翻译为对应的流表/批表,为了适应流表/批表的多样性(流表/批表的数据源可能不一样,带来with参数中key可能不一样;流表/批表的某些设置可能不一样,比如batchSize等),可以利用tableHints进行流表/批表的对应。方法如下:
set project.table.${mode}.${key}--mode: 流任务:`stream` 批任务:batch
举个例子,设置批任务的起停时间:
set project.table.batch.startTime='2020-11-11 00:00:00';set project.table.batch.endTime='2020-11-12 00:00:00';
第二种是在Dataphin的任务配置实时和离线模式分别任务参数的方式是利用任务参数进行替换。
实时质量监控
Dataphin实时数据质量主要面向开发者,针对产品中实时产出的数据表,通过对产出结果进行数据质量分析和校验,来保障数据的最终有效与准确。Dataphin支持统计趋势监测、实时多链路对比、实时离线数据核对。
- 统计趋势监测:趋势监测指的是基于数据趋势变化以及专家经验以捕获波动异常的监测方式;如 实时GMV的趋势陡增有些异常
- 实时多链路趋势对比:实时多链路指的是在实时计算的场景中,由于数据的恢复成本较高,无法快速从起点重新计算,因此需要使用多个计算链路,当发生计算异常时,自动/手动切换计算链路,是一种用资源换稳定的策略,当有重大的保障业务时,往往会采用该种类型;如每年双十一大屏都会采用多链路保障。
- 实时离线核对:实时离线核对,是保障实时数据常用的一种措施,由于实时计算处于一种持续运算状态,计算时间持久且受资源与源数据的扰动较大;离线数据在逻辑、数据复用性方面可以被更好地操作,因此,为了保障实时数据的准确性,常用离线数据与实时数据进行对比;如每年双十一前都会使用离线数据对实时数据进行校验;
双十一大屏后的Dataphin
回到文章开始的天猫双十一,了解了Dataphin平台特有的能力,我们来具体拆解Dataphin为什么能支撑天猫双十一的大屏。
快
- Dataphin为实时提供研发、调试、测试、运维全链路一站式服务,极大降低用户开发门槛;
- 同时提供统一元数据管理,元数据仅需初始化一次,轻松做到一次建表,多次引用,让开发聚焦业务逻辑,大幅度提升研发效率和体验;
- 另外有数据研发经历的同学都有这样的体会,很多数据口径都惊人的类似,甚至有些只是输入输出表不同,典型的场景比如主备链路,针对这种场景我们提供了模版研发的能力,相同逻辑封装在模版中,差异逻辑通过模版参数体现,新任务仅需引用模版配置模版参数即可,极大提升研发效率的同时也降低了口径维护成本。
基于以上能力,在双十一大屏的支持上,尽管业务玩法很多,需求井喷,仍然仅以2人便支撑上百需求。
稳
Dataphin提供任务监控及数据质量监控全方位保障任务稳定,快速发现问题;基于模版的主备多链路在异常发生时可以秒级切换,快速止血;基于实时任务血缘,快速定位问题根因;基于调试、测试、细粒度资源配置,快速验证并修复,真正做到1min发现、5min定位、10min解决。
准
基于流批一体的能力,真正做到代码统一,口径统一,存储统一,数据服务接口统一,研发提效的同时,保证数据一致。
未来规划
在即将发布的Flink VVP(Ververica Platform)适配版本将支持新的VVR引擎,也将在未来支持开源Flink引擎已支持更多的部署环境。Dataphin也将持续提升实时研发的能力和体验,帮助企业降低实时研发的门槛,挖掘更多的场景,获得实时数据带来的业务价值!