实时即未来,Dlink 为 Apache Flink 而生,让 Flink SQL 纵享丝滑。
Dlink 是一个交互式的 FlinkSQL Studio,可以在线开发、补全、校验 、执行、预览 FlinkSQL,支持 Flink 官方所有语法及其增强语法,并且可以同时对多 Flink 集群实例进行提交、停止、SavePoint 等运维操作,如同您的 IntelliJ IDEA For Flink SQL。
需要注意的是:Dlink 更专注于 FlinkSQL 的应用,而不是 DataStream。在开发过程中您不会看到任何一句 java、scala 或者 python。所以,它的目标是基于 100% FlinkSQL 来实现批流一体的实时计算平台。
值得惊喜的是:Dlink 的实现基于 Apache Flink 源码二次开发,支持其绝大多数特性与机制,而交互更加贴近 Flink 的功能与体验,并且紧随官方社区发展。即站在巨人肩膀上开发与创新,Dlink 在未来批流一体的发展趋势下潜力无限。
最后,Dlink 的发展皆归功于 Apache Flink 等其他优秀的开源项目的指导与成果。
注意:以下功能均为对应版本已实现的功能,实测可用。
应用 | 方向 | 功能 | 进展 |
---|---|---|---|
开发中心 | FlinkSQL | 支持 sql-client 所有语法 | 0.4.0 |
支持 Flink 所有 Configuration | 0.4.0 | ||
支持 Flink 所有 Connector | 0.4.0 | ||
支持 SELECT、SHOW 等查询实时预览 | 0.4.0 | ||
支持 INSERT 语句集 | 0.4.0 | ||
新增 SQL 片段语法 | 0.4.0 | ||
新增 AGGTABLE 表值聚合语法及 UDATF 支持 | 0.4.0 | ||
新增 Flink Catalog 交互查询 | 0.4.0 | ||
新增 执行环境的共享与私有会话机制 | 0.4.0 | ||
新增 多种方言的作业目录管理(FlinkSQL、SQL、Java) | 0.5.0 | ||
新增 作业配置与执行配置管理 | 0.4.0 | ||
新增 基于 Explain 的语法校验与逻辑解析 | 0.4.0 | ||
新增 JobPlan 图预览 | 0.5.0 | ||
新增 基于 StreamGraph 的表级血缘分析 | 0.4.0 | ||
新增 基于上下文元数据自动提示与补全 | 0.4.0 | ||
新增 自定义规则的自动提示与补全 | 0.4.0 | ||
新增 关键字高亮与代码缩略图 | 0.4.0 | ||
新增 选中片段执行 | 0.4.0 | ||
新增 布局拖拽 | 0.4.0 | ||
支持 local 模式下 FlinkSQL 提交 | 0.4.0 | ||
支持 standalone 模式下 FlinkSQL 提交 | 0.4.0 | ||
支持 yarn session 模式下 FlinkSQL 提交 | 0.4.0 | ||
支持 yarn per-job 模式下 FlinkSQL 提交 | 0.4.0 | ||
支持 yarn application 模式下 FlinkSQL 提交 | 0.4.0 | ||
Flink 作业 | 支持 yarn application 模式下 Jar 提交 | 0.4.0 | |
支持 作业 Cancel | 0.4.0 | ||
支持 作业 SavePoint 的 Cancel、Stop、Trigger | 0.4.0 | ||
新增 作业自动从 SavePoint 恢复机制(包含最近、最早、指定一次) | 0.4.0 | ||
Flink 集群 | 支持 查看已注册集群的作业列表与运维 | 0.4.0 | |
新增 自动注册 Yarn 创建的集群 | 0.4.0 | ||
SQL | 新增 外部数据源的 SQL 校验 | 0.5.0 | |
新增 外部数据源的 SQL 执行与预览 | 0.5.0 | ||
元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 | |
归档 | 新增 执行与提交历史 | 0.4.0 | |
运维中心 | 暂无 | 暂无 | 0.4.0 |
注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 |
新增 外部 Flink 集群实例心态检测与版本获取 | 0.4.0 | ||
新增 外部 Flink 集群手动一键回收 | 0.4.0 | ||
Flink 集群配置 | 新增 Flink On Yarn 集群配置注册及测试 | 0.4.0 | |
User Jar | 新增 外部 User Jar 注册 | 0.4.0 | |
数据源 | 新增 Mysql 数据源注册及测试 | 0.4.0 | |
新增 Oracle 数据源注册及测试 | 0.4.0 | ||
新增 postgreSql 数据源注册及测试 | 0.4.0 | ||
新增 ClickHouse 数据源注册及测试 | 0.4.0 | ||
关于 | 关于 Dlink | 版本更新记录 | 0.4.0 |
抢先体验( main 主支):dlink-0.5.0-SNAPSHOT
稳定版本( 0.4.0 分支):dlink-0.4.0
config/ -- 配置文件
|- application.yml
extends/ -- 扩展
|- dlink-client-1.11.jar
|- dlink-client-1.12.jar
|- dlink-client-1.14.jar
html/ -- 前端编译产物,用于Nginx
jar/ -- dlink application模式提交sql用到的jar
lib/ -- 内部组件
|- dlink-client-1.13.jar -- 必需
|- dlink-connector-jdbc.jar
|- dlink-function.jar
|- dlink-metadata-clickhouse.jar
|- dlink-metadata-mysql.jar
|- dlink-metadata-oracle.jar
|- dlink-metadata-postgresql.jar
plugins/
|- flink-connector-jdbc_2.11-1.13.3.jar
|- flink-csv-1.13.3.jar
|- flink-dist_2.11-1.13.3.jar
|- flink-json-1.13.3.jar
|- flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar
|- flink-shaded-zookeeper-3.4.14.jar
|- flink-table-blink_2.11-1.13.3.jar
|- flink-table_2.11-1.13.3.jar
|- mysql-connector-java-8.0.21.jar
sql/
|- dlink.sql --Mysql初始化脚本
auto.sh --启动停止脚本
dlink-admin.jar --程序包
解压后结构如上所示,修改配置文件内容。lib 文件夹下存放 dlink 自身的扩展文件,plugins 文件夹下存放 flink 及 hadoop 的官方扩展文件。其中 plugins 中的所有 jar 需要根据版本号自行下载并添加,才能体验完整功能,当然也可以放自己修改的 Flink 源码编译包。extends 文件夹只作为扩展插件的备份管理,不会被 dlink 加载。
在Mysql数据库中创建数据库并执行初始化脚本。
执行以下命令管理应用。
sh auto.sh start
sh auto.sh stop
sh auto.sh restart
sh auto.sh status
前端 Nginx 部署: 将 html 文件夹上传至 nginx 的 html 文件夹下,修改 nginx 配置文件并重启。
server {
listen 9999;
server_name localhost;
# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ^~ /api {
proxy_pass http://127.0.0.1:8888;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
- server.listen 填写前端访问端口
- proxy_pass 填写后端地址如 http://127.0.0.1:8888
- 将 html 文件夹下打包好的前端资源上传到 nginx 的 html 文件夹中,重启 nginx,访问即可。
dlink -- 父项目
|-dlink-admin -- 管理中心
|-dlink-app -- Application Jar
|-dlink-assembly -- 打包配置
|-dlink-client -- Client 中心
| |-dlink-client-1.11 -- Client-1.11 实现
| |-dlink-client-1.12 -- Client-1.12 实现
| |-dlink-client-1.13 -- Client-1.13 实现
| |-dlink-client-1.14 -- Client-1.14 实现
|-dlink-common -- 通用中心
|-dlink-connectors -- Connectors 中心
| |-dlink-connector-jdbc -- Jdbc 扩展
|-dlink-core -- 执行中心
|-dlink-doc -- 文档
| |-bin -- 启动脚本
| |-bug -- bug 反馈
| |-config -- 配置文件
| |-doc -- 使用文档
| |-sql -- sql脚本
|-dlink-executor -- 执行中心
|-dlink-extends -- 扩展中心
|-dlink-function -- 函数中心
|-dlink-gateway -- Flink 网关中心
|-dlink-metadata -- 元数据中心
| |-dlink-metadata-base -- 元数据基础组件
| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现
| |-dlink-metadata-mysql -- 元数据- mysql 实现
| |-dlink-metadata-oracle -- 元数据- oracle 实现
| |-dlink-metadata-postgresql -- 元数据- postgresql 实现
|-dlink-web -- React 前端
以下环境版本实测编译成功:
环境 | 版本 |
---|---|
npm | 7.19.0 |
node.js | 14.17.0 |
jdk | 1.8.0_201 |
maven | 3.6.0 |
lombok | 1.18.16 |
mysql | 5.7+ |
mvn clean install -Dmaven.test.skip=true
将 Flink 集群上已扩展好的 Connector 和 UDF 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 Connector 过程同 Flink 官方一样。
遵循SPI。
Flink 的版本取决于 lib 下的 dlink-client-1.13.jar。当前版本默认为 Flink 1.13.3 API。向其他版本的集群提交任务可能存在问题,已实现 1.11、1.12、1.13, 1.14,切换版本时只需要将对应依赖在lib下进行替换,然后重启即可。
切换版本时需要同时更新 plugins 下的 Flink 依赖。
超级管理员:admin/admin;
新增用户:默认密码 123456。
注册 Flink 集群地址时,格式为 host:port ,用英文逗号分隔。即添加 Flink 集群的 JobManager 的 RestApi 地址。当 HA 模式时,地址间用英文逗号分隔,例如:192.168.123.101:8081,192.168.123.102:8081,192.168.123.103:8081。新增和修改的等待时间较长,是因为需要检测最新的 JobManager 地址。心跳检测为手动触发,会更新集群状态与 JobManager 地址。
- 在左侧目录区域创建文件夹或任务。
- 在中间编辑区编写 FlinkSQL 。
- 在右侧配置作业配置和执行参数。
- Fragment 开启后,可以使用增强的 sql 片段语法:
sf:=select * from;tb:=student;
${sf} ${tb}
##效果等同于
select * from student
- 内置 sql 增强语法-表值聚合:
CREATE AGGTABLE aggdemo AS
SELECT myField,value,rank
FROM MyTable
GROUP BY myField
AGG BY TOP2(value) as (value,rank);
- MaxRowNum 为批流(Session模式下)执行Select时预览查询结果的最大集合长度,默认 100,最大 9999。
- SavePoint策略支持最近一次、最早一次、指定一次三种策略。
- Flink 共享会话共享 Catalog ,会话的使用需要在左侧会话选项卡手动创建并维护。
- 连接器为 Catalog 里的表信息,清空按钮会销毁当前会话。
- Local 模式主要用于语法校验、血缘分析、执行图预览等功能,当然也可执行任务,但目前版本建议请使用远程集群来执行任务。
- 执行 SQL 时,如果您选中了部分 SQL,则会执行选中的内容,否则执行全部内容。
- 小火箭的提交功能是异步提交当前任务已保存的 FlinkSQL 及配置到集群。由于适用于快速提交稳定的任务,所以无法提交草稿,且无法预览数据。
- 执行信息或者历史中那个很长很长的就是集群上的 JobId 或者 APPID,任务历史可以查看执行过的任务的数据回放。
- 草稿是无法被异步远程提交的,只能同步执行,且无法保存。
- Studio 的布局可以随意拖动,但由于是实时计算,联动较多,请温柔些。
- 同步执行时可以自由指定任务名,异步提交默认为作业名。
- 支持 set 语法设置 Flink 的执行配置,其优先级大于右侧的配置。
- 支持远程集群查看、SavePoint 及停止任务。
- 支持自定义及上下文的 sql 函数或片段的自动补全,通过函数文档维护。
- 支持 Flink 所有官方的连接器及插件的扩展,但需注意版本号适配。
- 使用 IDEA 进行源码调试时,需要在 admin 及 core 下修改相应 pom 依赖的引入来完成功能的加载。
- 支持基于 StreamGraph 的可执行 FlinkSql (Insert into)的血缘分析,无论你的 sql 有多复杂或者多 view。
- Dlink 目前提交方式支持 Standalone 、Yarn Session、Yarn PerJob、Yarn Application,K8S 后续支持。
- Dlink 目前对于 Flink 多版本的支持只能一个 Dlink 实例支持一个 Flink 版本,未来将开源同时支持多版本的能力。
- 使用 Yarn PerJob、Yarn Application 需要配置集群配置,且其自动注册的集群实例需要手动点击回收。
- 其他内容后续更新。。。
7.Dlink On Yarn 三种 Flink 执行方式的实践
期待您提出问题。
感谢 JetBrains 提供的免费开源 License 赞助
1.支持同时托管多版本的Flink实例
2.支持K8S多种运行模式
3.支持多种任务调度框架接口
4.支持UDF动态加载
5.完善Studio交互功能
欢迎您加入社区交流分享,也欢迎您为社区贡献自己的力量。
在此有意向参与代码及文档贡献或积极测试者可以私信我加入 Dlink Contributors 群聊进一步了解。
dlink将正式开始社区积极的发展阶段,社区的主旨是开放、交流、创新、共赢,dlink的核心理念是创新,即不受思想约束地勇于尝试。dlink本就是一个创新型的解决方案,而不是模仿已有产品的思路按部就班,一味模仿对于社区及所有人的发展意义并不大,积极创新才可能独树一帜,并为大家带来更大的利益。无论您是否已经建成了自己的FlinkSQL平台,相信它一定会在创新的方向上为您带来些许启发。
在此非常感谢大家的支持~
QQ社区群:543709668,申请备注 “ Dlink ”,不写不批
微信社区群(推荐,大佬云集):添加微信号 wenmo_ai 邀请进群,申请备注 “ Dlink ”,不写不批
公众号(最新消息获取建议关注):DataLink数据中台
163 邮箱:aiwenmo@163.com
QQ 邮箱:809097465@qq.com
Request ID=04122021/8392566
登录页
首页
Studio SQL 开发提示与补全
Studio 语法和逻辑检查
Studio 批流SELECT预览
Studio 异常反馈
Studio 进程监控
Studio 执行历史
Studio 数据回放
Studio SavePoint 管理
Studio 血缘分析
Studio 函数浏览
Studio 共享会话
集群管理
集群配置管理
数据源管理