欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

从零构建Flink SQL计算平台 - 1平台搭建概述

程序员文章站 2022-01-07 09:47:00
一、理想与现实 Apache Flink 是一个分布式流批一体化的开源平台。Flink 的核心是一个提供数据分发、通信以及自动容错的流计算引擎。Flink 在流计算之上构建批处理,并且原生的支持迭代计算,内存管理以及程序优化。 ​ 实时计算(Alibaba Cloud Realtime Comput ......

一、理想与现实

apache flink 是一个分布式流批一体化的开源平台。flink 的核心是一个提供数据分发、通信以及自动容错的流计算引擎。flink 在流计算之上构建批处理,并且原生的支持迭代计算,内存管理以及程序优化。

实时计算(alibaba cloud realtime compute,powered by ververica)是阿里云提供的基于 apache flink 构建的企业级大数据计算平台。在 pb 级别的数据集上可以支持亚秒级别的处理延时,赋能用户标准实时数据处理流程和行业解决方案;支持 datastream api 作业开发,提供了批流统一的 flink sql,简化 bi 场景下的开发;可与用户已使用的大数据组件无缝对接,更多增值特性助力企业实时化转型。

apache flink 社区迎来了激动人心的两位数位版本号,flink 1.10.0 正式宣告发布!作为 flink 社区迄今为止规模最大的一次版本升级,flink 1.10 容纳了超过 200 位贡献者对超过 1200 个 issue 的开发实现,包含对 flink 作业的整体性能及稳定性的显著优化、对原生 kubernetes 的初步集成以及对 python 支持(pyflink)的重大优化。

flink 1.10 同时还标志着对 blink的整合宣告完成,随着对 hive 的生产级别集成及对 tpc-ds 的全面覆盖,flink 在增强流式 sql 处理能力的同时也具备了成熟的批处理能力。

在过去的2019年,大数据领域的flink异常火爆,从年初阿里巴巴高调收购flink的母公司,到秋天发布的1.9以及最近的1.10版本完成整合阿里blink分支,各类分享文章和一系列国内外公司应用案例,都让人觉得flink是未来大数据领域统一计算框架的趋势。尤其是看过阿里云上的实时计算平台,支持完善的sql开发和批流都能处理的模式让人印(直)象(流)深(口)刻(水)。但是相对于公有云产品,稍微有点规模的公司都更愿意使用开源产品搭建自己的平台,可是仔细研究flink的官方文档和源码,准备撸起袖子开干时,才发现理想和现实的差距很大……

首先是阿里实时计算平台产品的sql开发界面:

从零构建Flink SQL计算平台 - 1平台搭建概述

然而现实中flink所支持的sql开发api是这样的:

// create a tableenvironment for specific planner batch or streaming
tableenvironment tableenv = ...; // see "create a tableenvironment" section

// register a table
tableenv.registertable("table1", ...)            // or
tableenv.registertablesource("table2", ...);     // or
tableenv.registerexternalcatalog("extcat", ...);
// register an output table
tableenv.registertablesink("outputtable", ...);

// create a table from a table api query
table tapiresult = tableenv.scan("table1").select(...);
// create a table from a sql query
table sqlresult  = tableenv.sqlquery("select ... from table2 ... ");

// emit a table api result table to a tablesink, same for sql result
tapiresult.insertinto("outputtable");

// execute
tableenv.execute("jobname");

最后翻遍flink文档发现提供了一个实验性质的命令行sql客户端:

从零构建Flink SQL计算平台 - 1平台搭建概述

此外当我们用开源flink代码部署一套集群后,整个集群有 jobmanager 和 taskmanager 两种角色,其中 jobmanager 提供了一个简单的管理界面,提供了上传jar包执行任务的功能,以及一些简单监控界面,此外还提供一系列管理和监控的 rest api,可惜都没有和sql层面直接相关的东西。

之所以有这一系列理想与现实的差异,是因为flink更多的定位在计算引擎,在开发界面等方面暂时投入较少,但是每写一个sql然后嵌入到代码中编译成jar包上传到flink集群执行是客(小)户(白)所不能接受的,这也就需要我们自己开发一套以sql作业为中心的管理平台(对用户暴露的web系统),由该平台管理 flink 集群,共同构成 flink sql 计算平台。

二、平台功能梳理

一个完整的sql平台在产品流程上至少(第一版)需要有以下部分。

  • sql作业管理:新增、调试、提交、下线sql任务

  • 数据源和维表管理:用ddl创建数据源表,其中维表也是一种特殊数据源

  • 数据汇管理:用ddl创建数据结果表,即 insert into 结果表 select xxx

  • udf管理:上传udf的jar包

  • 调度和运维:任务定时上下线、任务缩容扩容、savepoint管理

  • 监控:日志查看、指标采集和记录、报警管理

  • 其他:角色和权限管理、文档帮助等等……

除了作为web系统需要的一系列增删改查和交互展示功能外,大部分flink集群管理功能可以通过操作flink集群提供的rest接口实现,但是其中没有sql相关内容,也就是前面四项功能(提交sql、ddl、udf,后文统称提交作业部分)都需要自己实现和 flink 的交互代码,因此如何更好地提交作业就成了构建该平台的第一个挑战。