文章目录
- 01 引言
- 02 功能
- 2.1 资源管理
- 2.2 内置Flink集群/插件
- 2.3 支持模板
- 2.4 Gump模式
- 2.5 预览功能
- 2.6 CLI形式
- 2.7 可拔插
- 03 优化
- 3.1 变量管理
- 3.2 用户管理
- 3.3 作业配置
- 04 文末
01 引言
官方文档:https://streampark.apache.org/Github地址:https://github.com/apache/incubator-streampark
博主之前写过一篇博文《Streampark使用体验与建议》,可以知道Streampark它可以:
- 让流处理更简单, 使用
StreamPark
开发; - 可以极大降低学习成本和开发门槛, 让开发者只用关心最核心的业务;
- 规范了项目的配置,鼓励函数式编程,定义了最佳的编程方式;
- 提供了一系列开箱即用的
Connectors
; - 标准化了配置、开发、测试、部署、监控、运维的整个过程;
- 提供了
scala
和java
两套api
;
其最终目的是打造一个一站式大数据平台,流批一体,湖仓一体的解决方案。
博主在使用 Streampark 的过程中,产生了很多的idea
,本文记录下,仅供参考,欢迎大家评论。
02 功能
以下是博主期望后续可以新增的功能。
2.1 资源管理
资源管理:主要统一管理不同类型的jar包,可以支持自定义jar包上传、在线下载、jar包在线解析,并可以自定义分组。
可以把jar包类型主要分为如下几类:
- Catalog(目录):该
jar
包主要是用于管理项目的元数据(Fink
默认支持基于Memory
的Catalog
),可以支持自定义Catalog
(如:sqlite
、mysql
等)。在上传时,支持自动解析jar包的配置参数(使用工厂模式)、jar包的启用与禁用。 - Connector(连接器):支持自动解析jar包的连接参数(使用工厂模式);
- Function(函数):功能同上。
- Format(格式化):功能同上,例如:kafka连接器参数里面有一个
value.format
参数,这里就用到了。 - Entrypoint(执行jar包):jar模式下,可以选的执行jar包,上传后自动解析META-INF的MainClass,无需用户手动填写;
- Lib(依赖库):以上各种资源类型,依赖到的jar包;
- Goup(分组):以上不同jar资源类型的分组,分组里面还可以选择分组,可以为不同作业场景提前做好jar包的分组。
2.2 内置Flink集群/插件
Tips:
DockerFile
可以使用wget
下载flink
安装包,然后自动解压,并在容器启动后,自动启动Flink
集群。
为了方便使用者快速入门,可通过开关配置是否自动下载Flink
安装包,解压并自动安装,本地容器启动Flink
集群,这样用户首次使用时,即可不用去配置Settings
相关的信息了,因为是内置的,所以在Settings
菜单里的Flink Home
和Flink Cluster
看到内置的配置以及启动的集群。
2.3 支持模板
如果为了更好地让开发者去学习新的Connector以及降低学习FlinkSQL成本,可以支持模板配置,模板插入,这里特指FlinkSQL模式。
当配置完模板之后,在选择模板时,自动插入模板,并可以把依赖的jar/pom
自动填充,如下图所示:
2.4 Gump模式
除了FlinkSQL模式以及Jar模式,可以考虑加入Gump(傻瓜)模式,不过可能会破坏项目的架构,得慎重!!!
所谓的Gump
模式,指的就是像Navicat
一样使用,使用Catalog
去管理元数据,无需手动每次执行FlinkSQL都需要Create table。
Catalog目录下依次有:数据库 → 表/视图/方法。点击对应的树节点,可以显示详细的配置参数,同时右键,可以新建不同类型的目录、表(选择资源管理的jar),可视化界面填写参数。
除了界面的方式来配置,同时也可以通过DDL
语法来创建数据库、表、视图等。也可以使用DML语法来对数据进行增删改(这里没提到查,下面会说),做到真正意义上的流批一体(例如:通过操作jdbc的catalog,可以新增查改关系型数据的的表内容,实现批处理)。
结构示例图如下(有点类似VVP
):
2.5 预览功能
所谓的预览功能,就是在Gump
模式下使用FlinkSQL
的select
语法,界面可以实时显示数据,同时这里的界面数据可以通过分享链接的形式,让其它的系统做嵌入ifream
显示,类似于grafana
分享监控指标页面。
Flink的查询功能似乎是没这么简单的,应该是需要另外功能去不断fetch数据的。这里的预览功能可以选择前面提到的内置Flink集群作为计算资源,方便用户操作。
2.6 CLI形式
Flink配置详情:https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/config/
这里可能对项目的破坏比较大,只是想法,仅供参考!
streampark
提交作业的应该是使用某个指定版本的Flink来提交的(或打包指定某个版本),也就是使用Java api的形式。虽然api可以很方便让我们提交作业,但是对于不懂Flink 的开发来说,学习其api无疑是很困难的,所以博主建议可以使用Command的形式,有如下几个原因:
- 首先,官方文档对Command的文档是比较完善的,不懂的同学可以直接去查。
- 其次,开发者需要不断的去适配新版本的Flink,如果使用command,使用固定的命令即可
- 这里的提交客户端,也就是不同Flink版本的安装包,可以通过开放Flink的开放api或者去scrap下来,用户自主下载安装,同时自动配置Flink Home。
当然,这里可能会涉及到一些返回结果的获取,例如:提交到yarn,初步的想法是通过日志正则获取application_id,然后根据application_id去调用yarn的rest接口获取flink job id。
其它的场景,应该总是可以有合适的方式的去获取flink的指标的。
2.7 可拔插
在前面的步骤,可以通过离线上传或者在线下载多版本的Flink
插件(安装包),然后通过Command
的形式提交作业了,类似的Hadoop
客户端,Kerberos
认证组件等也可以通过在线过离线上传的方式安装。
其实博主的想法就是插件的动态安装,可拔插式编程,开发者只需要知道使用java命令去调用相关的command shell 命令即可,只需要安装对应的组件。能想到的有如下几个插件:
- Flink插件管理:获取最新
flink
插件列表(开放api
或scrap
方式获取),上传自定义或下载安装包,自动解压安装,自动补充Flink Home
路径(这里的压力似乎给到了Flink的开发团队了😄)。 - 计算集群管理:
hadoop
集群(包含客户端配置、服务端资源重定向跳转管理等)、Kubernetes
(客户端配置、dashboard
界面管理等),aws
等; - 认证组件管理:
kerberos
认证组件管理; - 。。。。。。
03 优化
接下来说说我对Streampark的优化建议。
3.1 变量管理
变量管理,建议加多一个变量类型,例如秘钥、路径、文件等。如果有其他模块引用了(目前是FlinkSQL引用),可以根据类型来做更灵活的操作。
就类似jenkins的“全局凭证”模块,如下图:
3.2 用户管理
建议系统管理不要放到菜单栏,或者放到菜单栏的底部,让用户更加的专注于“作业的开发”
3.3 作业配置
作业的配置比较多,能否弄一个全局默认配置?
或者说,配置能否像CDH一样,做到可视化(如果想使用户了解配置详情或中文含义,这总得是需要花时间去“翻译的”整理的),例如:
04 文末
以上是博主对Streampark提出的一些关于界面功能的优化与建议,仅为个人看法,欢迎大家指出。并希望Streampark能越来越好,最后附上Streampark的Github地址以及文档:
谢谢大家的阅读,本文完!