打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

一、理想与现实

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开发API是这样的:

// create a TableEnvironment for specific planner batch or streamingTableEnvironment tableEnv = ...; // see "Create a TableEnvironment" section// register a TabletableEnv.registerTable("table1", ...)            // ortableEnv.registerTableSource("table2", ...);     // ortableEnv.registerExternalCatalog("extCat", ...);// register an output TabletableEnv.registerTableSink("outputTable", ...);// create a Table from a Table API queryTable tapiResult = tableEnv.scan("table1").select(...);// create a Table from a SQL queryTable sqlResult  = tableEnv.sqlQuery("SELECT ... FROM table2 ... ");// emit a Table API result Table to a TableSink, same for SQL resulttapiResult.insertInto("outputTable");// executetableEnv.execute("jobName");

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

此外当我们用开源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 的交互代码,因此如何更好地提交作业就成了构建该平台的第一个挑战。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一文揭秘阿里实时计算Blink核心技术:如何做到唯快不破?
2015 Bossie评选:最佳的10款开源大数据工具
修改代码150万行!Apache Flink 1.9.0做了这些重大修改
Apache Flink 不止于计算,数仓架构或兴起新一轮变革
40亿条/秒!Flink流批一体在阿里双11首次落地的背后
比拼生态和未来,
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服