Unverified Commit 7970815d authored by walkhan's avatar walkhan Committed by GitHub

Merge pull request #762 from DataLinkDC/dlink-docs

Dlink add Flink1.15 docs and migrate documentation to dev branch
parents c2f886ae 1d25b255
......@@ -33,4 +33,11 @@ dlink-web/node_modules/*
dlink-web/node/*
dlink-web/dist/*
dlink-admin/src/main/resources/static/*
dependency-reduced-pom.xml
\ No newline at end of file
dependency-reduced-pom.xml
# Dinky Docs gitignore
docs/.docusaurus
docs/node_modules
docs/.cache-loader
docs/package-lock.json
docs/build
This diff is collapsed.
## Dinky Website
该项目保留了用于构建 Dinky 官方网站的所有资源,服务于 http://www.dlink.top/
## 条件
Dinky 网站基于 Docusaurus 。如果您的 Docusaurus 版本低于 2.0.0,请升级到 2.0.0。另请确保您的Node版本为 14.x。
### 安装
```
$ yarn / npm i
```
### 本地启动
```
$ yarn start / npm run start / npx docusaurus start [--port 3111 ] [--host localhost ] 默认端口为 3000
```
此命令启动本地开发服务器并打开浏览器窗口。大多数更改都会实时预览,而无需重新启动服务器。
### 编译
```
$ yarn build / npm run build
```
此命令将静态内容生成到 build 目录中,并且可以使用任何静态内容托管服务提供服务。
## 如何提交一个 PR
确保您有提交问题以跟踪 PR:https://github.com/DataLinkDC/dinky-website/issues
- 不要使用 `git add .` 提交所有更改;
- 只需推送您更改的文件,例如:
- `*.md`
- `config.js`
- 提交 PR 到 **dev** 分支;
## 添加新文档
### 为文档添加新文章
- 在当前路径下的 docs 下添加新的 `.md` 文件
- 在本地运行 serve 验证文章是否正确显示
- 发送拉取的请求包含 `*.md`
### 为文档添加新版本
- 修改 docs 中的文档,然后在本地运行 `yarn start`或者 `npm run start`
- 将新添加的文档从 docs 复制到 versioned_docs 的新版本
- 修改最后一个所有版本在 `/src/pages/version/index.js`
### 添加博客/分享/实践
- 只需在根目录下的 `blog` 文件夹下添加新的 `.md` 文件 , 需要注意点如下:
```text
1. 文件命名格式: `年-月-日-title.md` 切记不可以中文命名 命名尽量见名知意 言简意赅
2. 例如: `2022-01-01-hello-world.md`
3. 文件名称中的日期将自动解析为改文章的创建日期
```
- 博客作者的作者信息可以添加到 `authors.yml` 中 ,格式如下:
```text
aiwenmo: # 博客作者
name: aiwenmo # 博客作者名称
title: Dinky 项目发起人 # 博客作者标题
url: https://github.com/DataLinkDC/dlink # 博客作者主页
image_url: http://www.aiwenmo.com/dinky/docs/dinky_logo.svg # 博客作者头像
```
- 作者信息定义完成后 即可在 `md` 文件顶部引用 eg: `authors: [aiwenmo]`
- 文档头部信息引用模板:
```text
# 注意 此处定义信息 必须从文档的顶部(第一行)开始
---
slug: first-blog-post # 博客 slug 等于 文件名中自动解析的 title
title: First Blog Post # 标题 可覆盖文件名称中的自动解析的 title
authors: [dinky] # 可引用 authors.yml 定义的作者名称 可以多个作者 逗号隔开
tags: [Hudi, Flink] # 文档所属标签 可选项(可多个)
---
注意 : 如果不像在 authors.yml 中定义作者信息 模板如下:
---
slug: first-blog-post # 博客 slug 等于文件名
title: First Blog Post # 博客 标题
authors:
name: aiwenmo # 博客作者名称
title: Dinky 项目发起人 # 博客作者标题
url: https://github.com/DataLinkDC/dlink # 博客作者主页
image_url: http://www.aiwenmo.com/dinky/docs/dinky_logo.svg # 博客作者头像
tags: [Hudi, Flink] # 文档所属标签 可选项(可多个且无需定义)
---
```
为了更方便得提交您的文章 博客相关的格式如下:
```text
---
slug: long-blog-post
title: Blog Title
authors: [aiwenmo]
tags: [hello, docusaurus]
---
输入简短的该博客描述信息
<!--truncate--> # 注意:此处用于主页截断 上述的描述信息 以达到首页的博客列表limit 此行必须写
正文
```
**注意:** 如您的博客文章中含有图片 请遵守以下规范:
- 文章内图片统一放置在 `blog/blog_img/{文件的title名称 命名新的文件夹}/`
- 图片需要更名: 不要使用默认 `img.png` 根据其用途命名, 不能有中文 , 尽量见名知意
- 文档内引用图片 请使用相对路径 eg: `![图片名称](./blog_img/{文件的title名称 命名新的文件夹}/demo.png)`
## 文档目录结构
```html
blog --博客分享
docs --最新文档
download --下载
i18n -- 国际化
src --源码
- components --组件
- HomepageFeature --首页特性
- css --css
- pages -- all version 页面管理
- versions --版本管理
static --静态文件
- img --官网图片
versioned_docs --历史版本文档
- version-0.6.0 --版本0.6.0文档
- version-0.6.1 --版本0.6.1文档
version_sidebars --历史版本文档侧边栏
- version-0.6.0-sidebars.json --历史版本文档侧边栏
- version-0.6.1-sidebars.json --历史版本文档侧边栏
babel.config.js --babel配置文件
docusaurus.config.js --docusaurus配置文件
package.json --项目配置文件
README.md --项目介绍
sidebars.js --侧边栏配置文件
sidebarsDevelopment.js --侧边栏配置文件
versions.json --版本配置文件
```
![logo](_media/dinky.svg)
# Dinky <small>0.6</small>
> Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑。
- 一站式 FlinkSQL & SQL DataOps
- 基于 Apache Flink 二次开发,无侵入,开箱即用
- 实时即未来,批流为一体
[GitHub](https://github.com/DataLinkDC/dlink)
[Gitee](https://gitee.com/DataLinkDC/dlink)
[Get Started](/zh-CN/introduce)
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1641731904214" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10378" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M440.32 552.96c-30.72 0-51.2-20.48-76.8-30.72-76.8-40.96-143.36-92.16-204.8-153.6-20.48-25.6-46.08-46.08-61.44-76.8 20.48-10.24 46.08-5.12 66.56-10.24 5.12 0 10.24 5.12 10.24 5.12 81.92 102.4 174.08 184.32 266.24 266.24z" fill="#1296db" opacity=".29" p-id="10379"></path><path d="M936.96 353.28h-30.72c-40.96 0-81.92-5.12-117.76-35.84-40.96-35.84-92.16-25.6-128 5.12-15.36 15.36-30.72 30.72-40.96 46.08-10.24 5.12-15.36-10.24-20.48-15.36-30.72-35.84-66.56-76.8-102.4-112.64-40.96-35.84-92.16-66.56-143.36-81.92-51.2-10.24-102.4-25.6-148.48-40.96-5.12 0-10.24-5.12-20.48 0l30.72 76.8c0 5.12 0 10.24 5.12 10.24 5.12 25.6 15.36 46.08 25.6 66.56 10.24 25.6 25.6 56.32 40.96 81.92 40.96 71.68 92.16 138.24 148.48 199.68l5.12 5.12c15.36 5.12 10.24 15.36 0 25.6-71.68 102.4-133.12 209.92-184.32 332.8-15.36 25.6-25.6 56.32-35.84 87.04 10.24-10.24 15.36-20.48 20.48-30.72 71.68-117.76 143.36-235.52 271.36-296.96 35.84-15.36 66.56-30.72 102.4-51.2 30.72-15.36 61.44-35.84 81.92-61.44 25.6-20.48 35.84-51.2 46.08-81.92 10.24-35.84 30.72-66.56 61.44-87.04 51.2-25.6 107.52-25.6 163.84-30.72 10.24 0 25.6 5.12 35.84-5.12-25.6-5.12-46.08-5.12-66.56-5.12z" fill="#1296db" p-id="10380"></path><path d="M322.56 399.36c-25.6-40.96-51.2-87.04-76.8-128-5.12-20.48-15.36-40.96-25.6-66.56 0 0-5.12-5.12-5.12-10.24-25.6 0-51.2-5.12-76.8-5.12-5.12 0-10.24-5.12-15.36 0-5.12 5.12 0 10.24 0 15.36 15.36 25.6 30.72 51.2 40.96 76.8l10.24 10.24c51.2 66.56 112.64 122.88 174.08 184.32 30.72 25.6 61.44 56.32 92.16 76.8-40.96-51.2-81.92-97.28-117.76-153.6z" fill="#1296db" opacity=".54" p-id="10381"></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1639891966613" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4315" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M828.163241 196.040908l-0.226151 0C747.136833 115.146507 635.360074 65.11502 511.867482 65.11502c-122.740462 0-234.780211 50.031487-315.318502 130.925888l-0.488117 0c-81.026408 80.538291-130.813325 192.446034-130.813325 316.426743 0 122.872468 49.78794 234.649228 130.813325 315.187519 81.026408 81.513502 192.57804 131.301442 315.806619 131.301442 123.492592 0 235.269351-49.786916 315.807642-131.301442l0.488117 0c80.801281-80.538291 130.813325-192.316074 130.813325-315.187519C958.976566 388.486942 909.188626 276.579199 828.163241 196.040908M779.352559 779.331581 779.352559 779.331581l0 0.26299c-68.335365 68.335365-162.766061 110.538559-267.485077 110.538559-104.455004 0-199.148689-42.202171-266.995937-110.538559l-0.488117-0.26299c-68.335365-68.335365-110.312408-162.898067-110.312408-266.864954 0-104.943121 41.977044-199.767789 110.312408-267.972171l0.488117-0.243547c67.847248-68.222801 162.540933-110.687962 266.995937-110.687962 104.719017 0 199.148689 42.466184 267.485077 110.687962l0 0.243547c68.823482 68.204381 110.800525 163.02905 110.800525 267.972171C890.153084 616.434537 848.175017 710.996217 779.352559 779.331581" p-id="4316" fill="#BF73F2" data-spm-anchor-id="a313x.7781069.0.i7" class="selected"></path><path d="M741.278405 530.395976c-2.177596 0-4.618181-0.225127-6.832615-0.488117l-6.082532-0.976234-430.776094-66.007343c-0.713244-0.243547-1.464351-0.243547-1.952468-0.243547-25.118074-4.749164-41.488927-27.690666-37.809117-52.227502 0.225127-3.284813 1.201361-6.477528 2.665713-10.250458 0.488117-0.731664 0.976234-1.707898 1.464351-2.684132 0.976234-2.553149 1.952468-4.28049 3.416819-6.100952 40.024575-68.955488 127.171378-112.62201 225.995127-113.598244 0.976234 0 33.19196-3.547803 45.393863-34.542724 0-0.243547 11.489682-20.98801 24.405853-20.98801 5.858428 0 12.69002 6.232958 13.666254 11.713786 0.264013 1.464351 7.096628 47.458895 34.656311 62.966077 90.074482 30.506804 158.409846 97.997941 176.206164 174.987407 0.48914 1.219781 0.976234 4.03592 1.239224 6.214539l0 1.238201 0.226151 0c0.26299 4.26207 0.26299 8.035-0.48914 12.07092C783.256472 513.443885 763.995803 530.395976 741.278405 530.395976" p-id="4317" fill="#E65270" data-spm-anchor-id="a313x.7781069.0.i8" class=""></path><path d="M476.010833 804.224528c-11.489682 0-20.500916-6.570649-21.252023-7.320733l-17.797341-14.381545c-106.408495-30.262234-175.983083-119.473045-162.315806-208.42189l12.465916-83.95511c1.201361-6.833639 7.058766-10.738575 13.892405-10.250458l52.227502 7.677866c6.833639 0.976234 11.226692 7.078209 10.250458 13.798261l-7.546883 60.525492c0 0-1.464351 25.118074 5.594415 49.89948 1.238201-14.042831 3.415796-31.238468 6.608511-50.275034l9.011234-59.436694c0.750083-3.284813 2.440585-6.214539 5.14416-7.67889 2.440585-2.308579 5.857405-3.059686 8.786107-2.571568l336.044546 53.204759c6.607488 0.976234 11.000542 7.320733 10.024308 13.797237l-12.69002 82.490759c-13.44215 88.705298-102.014418 151.934365-210.149231 151.934365l-6.345522 0-20.012799 8.785084C484.045833 803.512307 480.140896 804.224528 476.010833 804.224528" p-id="4318" fill="#FAA100" data-spm-anchor-id="a313x.7781069.0.i6" class=""></path></svg>
\ No newline at end of file
* [首页](/introduce.md)
* 文档
* [master](/introduce.md)
* [下载](/deploy/download.md)
* 开发者
* [参与贡献](/zh-CN/developer_guide/how_contribute.md)
* [本地调试](/zh-CN/developer_guide/local_debug.md)
* [远程调试](/zh-CN/developer_guide/remote_debug.md)
* 用户案例
* 语言
* [:cn: 中文](/)
* [:us: English](/en-US/)
## 敬请期待
\ No newline at end of file
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};
---
slug: kudu-extend
title: Dinky 扩展 Kudu 实践分享
authors:
- name: roohom
title: 深耕大数据领域多年 主要倾向于实时方向的研究
url: https://github.com/DataLinkDC/dlink
image_url: http://www.aiwenmo.com/dinky/docs/dinky_logo.svg
tags: [Flink, Dinky, KUDU]
---
&emsp;&emsp;
本文介绍如何通过 Dinky 整合 Kudu,以支持写 SQL 来实现数据的读取或写入 Kudu。
Flink 官网介绍了如何去自定义一个支持 Source 或者 Sink 的 Connector ,这不是本文探讨的重点,本文侧重于用别人已经写好的Connector 去与 Dinky 做集成以支持读写 Kudu。
<!--truncate-->
> 注意:以下内容基于 Flink1.13.6 和 Dinky 0.6.2,当然其他版本同理
## 准备工作
在Kudu上创建一个表,这里为test
![kudu_table](./blog_img/kudu_extend/kudu_table.png)
我们还需要一个Flink可以使用的针对kudu的Connector,我们找到[flink-connector-kudu]这个项目,clone该项目并在本地根据本地所使用组件的版本修改代码进行编译。
1、修改pom
```xml
<flink.version>1.13.6</flink.version>
<kudu.version>1.14.0</kudu.version>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
```
这里将Flink版本修改为 1.13.6, 并且使用 1.14.0 版本的 kudu-client,因为项目作者在 README 中已经说明了使用 1.10.0 会存在问题,并且添加了 shade 方式打包。
![tag_version](./blog_img/kudu_extend/tag_version.png)
2、修改 `org.colloh.flink.kudu.connector.table.catalog.KuduCatalogFactory`
![update_kuducatalog](./blog_img/kudu_extend/update_kuducatalog.png)
## 构建及使用
1、准备工作完毕,我们将项目编译打包(步骤略),将得到的 jar 放在 flink 的 lib 目录下以及 dinky 的 plugins 目录下,如果需要使用 yarn-application 模式提交任务,还需要将 jar 放在 HDFS 上合适位置让 flink 能访问到。
2、重启 Dinky,如果使用 yarn-session 模式,则需要重启得到一个 session 集群,进入 dinky 的注册中心配置一个合适的集群实例
![register_cluster](./blog_img/kudu_extend/register_cluster.png)
3、接下来我们去 dinky 的数据开发界面,写一个读取的 SQL demo。
```sql
CREATE TABLE IF NOT EXISTS kudu_test (
id BIGINT,
name STRING
) WITH (
'connector' = 'kudu',
'kudu.masters' = 'cdh001:7051,cdh002:7051,cdh003:7051',
'kudu.table' = 'impala::xxx.test',
'kudu.hash-columns' = 'id',
'kudu.primary-key-columns' = 'id'
);
SELECT * FROM kudu_test;
```
点击运行。
![click_running](./blog_img/kudu_extend/click_running.png)
4、再来一个写入数据的 SQL demo。
```sql
CREATE TABLE IF NOT EXISTS kudu_test (
id BIGINT,
name STRING
) WITH (
'connector' = 'kudu',
'kudu.masters' = 'cdh001:7051,cdh002:7051,cdh003:7051',
'kudu.table' = 'impala::xxx.test',
'kudu.hash-columns' = 'id',
'kudu.primary-key-columns' = 'id'
);
INSERT INTO kudu_test
SELECT 5 AS id , NULLIF('', '') AS name;
```
![sqldemo_submit1](./blog_img/kudu_extend/sqldemo_submit1.png)
成功运行,再去查看kudu表的数据。
![show_kudu_tabledata](./blog_img/kudu_extend/show_kudu_tabledata.png)
## 总结
&emsp;&emsp;
目前来说,Dinky 与 Kudu 的整合需要我们做出一些编译工作,甚至是手动对代码的改造,但工作量并不大,并不需要去手动去做 Connector 扩展,在项目使用上 Dinky 提供了较为简单的扩展方式。
&emsp;&emsp;
另外,使用 Dinky 去做 Flink 相关任务的开发,不再需要编写大量的 Java 代码去做兼容适配,以 SQL 的方式交互开发,极大降低了 Flink 开发的入门门槛。
&emsp;&emsp;
Dinky 提供了很多的任务监控管理,可以很方便得知任务的运行状态并进行管理。 内置了SQL语法检查、运行图展示、运行调试等等的功能,实现了类似在 Zeppelin 上开发 Spark 的体验,大大提高了开发效率。
&emsp;&emsp;
我个人很喜欢 Dinky 所提供的功能,并且对其的实现逻辑也很感兴趣,希望 Dinky 能越来越好,功能更强,继续降低 Flink 任务开发的难度和门槛。
aiwenmo:
name: aiwenmo
title: Dinky 项目发起人
url: https://github.com/DataLinkDC/dlink
image_url: http://www.aiwenmo.com/dinky/docs/dinky_logo.svg
\ No newline at end of file
{
"label": "用户手册",
"position": 10
}
{
"label": "运维中心",
"position": 2
}
---
sidebar_position: 1
id: deveops_center_intro
title: 运维中心概述
---
运维中心包括 FlinkSQL 任务运维、周期任务运维、手动任务运维、作业监控等运维功能模块,为您提供任务操作与状态等多方位的运维能力。
## 运维中心功能模块
当您在数据开发中完成作业开发,并提交和发布至集群后,即可在运维中心对任务进行运维操作,包括作业实例运行详情查看,针对作业任务的关键指标查看、集群信息、作业快照、异常信息、作业日志、自动调优、配置信息、FlinkSQL、数据地图、即席查询、历史版本、告警记录。
下表为运维中心各模块功能使用的简单说明:
| 模块 | 说明 |
| :------: | :------------------------------------: |
| 作业实例 | 查看及修改 FlinkSQL 的作业实例状态 |
| 作业总览 | 查看 FlinkSQL 各监控指标 |
| 集群信息 | 查看 FlinkSQL 的集群实例信息 |
| 作业快照 | |
| 异常信息 | 查看 FlinkSQL 启动及运行时的异常 |
| 作业日志 | 完整的 FlinkSQL 日志 |
| 自动调优 | - |
| 配置信息 | 查看 FlinkSQL 的作业配置 |
| FlinkSQL | 查看 FlinkSQL 的 SQL 语句 |
| 数据地图 | 查看 FlinkSQL 的字段血缘 |
| 即席查询 | |
| 历史版本 | 对比查看 FlinkSQL 作业发布后的多个版本 |
| 告警记录 | 查看 FlinkSQL 提交和发布后的告警信息 |
:::warning 注意事项
仅异步提交和发布功能,支持在运维中心查看监控任务。
:::
\ No newline at end of file
---
sidebar_position: 3
id: indicators_list
title: 监控指标一览
---
通过查阅监控指标一览,您可以了解到监控指标中每个指标的指标含义。这有助于您更好的使用 Dinky 的监控功能。
:::info 信息
您可以在运维中心查看以下指标,同时也可以 [修改作业状态](./job_instance_status#修改作业状态)
:::
## 作业总览
| 指标名称 | 指标含义 |
| :------: |:---------------:|
| 作业状态 | Flink 的 Task 状态 |
| 重启次数 | 未实现 |
| 耗时 | Flink 作业总耗时 |
| 启动时间 | 作业实例启动时间 |
| 更新时间 | 作业实例更新时间 |
| 完成时间 | 作业实例完成时间 |
| 指标名称 | 指标含义 |
| :------: |:----------------:|
| 名称 | Flink Task 名称 |
| 状态 | Task 状态 |
| 接收字节 | 从上游 Task 接收的字节数 |
| 接收记录 | 从上游 Task 接收的记录数 |
| 发送字节 | 发给下游 Task 的字节数 |
| 发送记录 | 发给下游 Task 的记录数 |
| 并行度 | Task 并行读 |
| 开始时间 | Task 开始时间 |
| 结束时间 | Task 完成时间 |
| 算子 | Task 具体的算子各状态的数量 |
:::tip 说明
如果作业只有一个 Task 时,接收字节、接收记录、发送字节、发送记录是均无法从上下游 Task 获取相关 Metrics 统计信息,所以显示为 0。
如果非要查看具体的 Metrics,可以通过 Flink 配置更改 chain 策略。
:::
## 配置信息
| 指标名称 | 指标含义 |
|:-------------------:|:---------------------:|
| 执行模式 | 作业的执行模式 |
| 集群实例 | 手动或自动注册的集群实例 |
| 集群配置 | 手动注册的集群配置 |
| 共享会话 | 是否开启共享会话及其 Key |
| 片段机制 | 是否开启全局变量 |
| 语句集 | 是否开启 Insert 语句集 |
| 任务类型 | FlinkSQL、FlinkJar、SQL |
| 批模式 | 是否开启 batch mode |
| SavePoint 机制 | 最近一次、最早一次、指定一次 |
| SavePoint | SavePoint 机制对应的 Path |
| Flink Configuration | 自定义的其他 Flink 配置 |
---
sidebar_position: 4
id: job_details
title: 作业详情
---
1.在运维中心,单击**点击目标作业名**
2.单击**作业总览**,进入作业详情页面,可以看到各个模块的详情信息。
![detail](http://www.aiwenmo.com/dinky/docs/administrator_guide/devops_center/job_details/detail.png)
:::info 信息
如果您要使用并查看运维中心的更多功能,请详见操作指南
:::
---
sidebar_position: 2
id: job_instance_status
title: 作业实例状态
---
如果您已经提交作业或者发布上线作业,可通过运维中心查看和修改作业实例状态。默认显示当前实例,切换后显示历史实例。
**当前实例**
![current_instance](http://www.aiwenmo.com/dinky/docs/administrator_guide/devops_center/job_manage/job_instance_status/current_instance.png)
**历史实例**
![history_instance](http://www.aiwenmo.com/dinky/docs/administrator_guide/devops_center/job_manage/job_instance_status/history_instance.png)
## 实例状态
运行信息为您展示作业的实时运行信息。您可以通过作业的状态来分析、判断作业的状态是否健康、是否达到您的预期。**Task状态** 为您显示作业各状态的数量。Task存在以下11种状态,均为 Flink 作业状态
- 已创建
- 初始化
- 运行中
- 已完成
- 异常中
- 已异常
- 已暂停
- 停止中
- 停止
- 重启中
- 未知
作业提交或者发布后,可看到作业实例的详情信息。
:::tip 说明
如果作业长时间处于初始化状态而未发生改变时,一般是后台发生了异常,却没有被 Dinky 捕捉到,需要自行查看 log 来排查问题。
目前 Per-Job 和 Application 作业在停止时会被识别为 **未知** 状态。如果网络受限或者集群已被手动关闭,作业也会被识别为 **未知**
:::
## 作业实例信息
作业实例详细包含配置信息及运行状态和时间,各字段的含义
| 字段名称 | 说明 |
| :------: |:-------------------------------------------------------------------------------------------------------------------:|
| 作业名 | 创建的作业名称,即pipeline.name |
| 生命周期 | 开发中<br/> 已发布<br/> 已上线 |
| 运行模式 | Standalone<br/>Yarn Session<br/>Yarn Per-job<br/>Yarn Application<br/>Kubernetes Session<br/>Kubernetes Application |
| 集群实例 | 手动或自动注册的 Flink 集群 |
| 作业ID | Flink 作业的 JID |
| 状态 | 实例状态 |
| 开始时间 | 作业创建时的时间 |
| 耗时 | 作业运行的时长 |
:::tip 说明
如果作业状态有问题,可以进入作业信息后点击刷新按钮强制刷新作业实例状态。
:::
## 修改作业状态
1.在运维中心,单击**点击目标作业名**
2.单击**作业总览**,进入作业详情页面
3.根据需要单击以下按钮,修改作业状态
![Modify_instance](http://www.aiwenmo.com/dinky/docs/administrator_guide/devops_center/job_manage/job_instance_status/Modify_instance.png)
其中,每个按钮含义如下表所示
| 操作名称 | 说明 |
| :------------: |:---------------------------:|
| 重新启动 | 作业只重新启动 |
| 停止 | 作业只停止 |
| 重新上线 | 作业重新启动,并且从保存点恢复 |
| 下线 | 作业触发 SavePoint 并同时停止 |
| SavePoint 触发 | 作业触发 SavePoint 操作,创建一个新的保存点 |
| SavePoint 暂停 | 作业触发 SavePoint 操作,并暂停作业 |
| SavePoint 停止 | 作业触发 SavePoint 操作,并停止作业 |
| 普通停止 | 作业只停止 |
---
sidebar_position: 6
id: feature
title: 快捷键使用指南
---
**在数据开发编辑器内可使用以下快捷键**
......
{
"label": "注册中心",
"position": 3
}
---
position: 1
id: cluster_manage
title: 集群管理
---
提交 FlinkSQL 作业时,首先要保证安装了 Flink 集群。Flink 当前支持的集群模式包括:
- Standalone 集群
......@@ -6,23 +13,27 @@
对于以上的三种集群而言,Dinky 为用户提供了两种集群管理方式,一种是集群实例管理,一种是集群配置管理。
**需要说明的是:**
:::tip 说明
- Standalone 集群适用于既可以做为查询使用,又可以将作业异步提交到远程集群
- Yarn Session 和 Kubernetes Session 适用于既可以做为查询使用,又可以将作业异步提交到远程集群
- Yarn Per-job,Yarn Application 和 Kubernetes Application 适用于异步提交
:::
## 集群实例管理
集群实例管理适用于 Standalone,Yarn Session 和 Kubernetes Session 这三种集群实例的注册。
对于已经注册的集群实例,您可以对集群实例做编辑、删除、搜索、心跳检测和回收等。
### 注册集群实例
**注册中心 > 集群管理 > 集群实例管理 > 新建**
![cluster_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/cluster_manager/cluster_manager_list.png)
![cluster_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/cluster_manager_list.png)
![create_flink_cluster](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/cluster_manager/create_flink_cluster.png)
![create_flink_cluster](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/create_flink_cluster.png)
**参数配置说明:**
......@@ -32,54 +43,21 @@
- **JobManager HA地址:** JobManager 的 RestAPI 地址,当 HA 部署时,将可能出现的多个 RestAPI 地址均写入,且采用英文逗号隔开
- **注释:** 自定义
当集群实例配置完成后,点击**心跳**,会更新最新的集群实例信息
![心跳检查](http://www.aiwenmo.com/dinky/dev/docs/%E5%BF%83%E8%B7%B3%E6%A3%80%E6%9F%A5.png)
点击**回收**,会将提交 Per-Job 和 Application 任务时自动注册且已经注销的集群实例进行回收
![回收](http://www.aiwenmo.com/dinky/dev/docs/%E5%9B%9E%E6%94%B6.png)
**注意:** 心跳与回收需要手动触发
### 集群实例编辑
当集群配置完成后,用户可以对集群实例做编辑修改。
首先进入 **注册中心 > 集群实例管理**,在列表中找到对应的集群实例,点击 **编辑**,编辑集群
![集群实例编辑](http://www.aiwenmo.com/dinky/dev/docs/%E9%9B%86%E7%BE%A4%E5%AE%9E%E4%BE%8B%E7%BC%96%E8%BE%91.png)
![编辑集群](http://www.aiwenmo.com/dinky/dev/docs/%E7%BC%96%E8%BE%91%E9%9B%86%E7%BE%A4.png)
### 集群实例删除
用户可以对所添加的集群实例进行删除。
首先进入 **注册中心 > 集群实例管理**,在列表中找到对应的集群实例,点击 **删除**,删除集群!
![集群实例删除](http://www.aiwenmo.com/dinky/dev/docs/%E9%9B%86%E7%BE%A4%E5%AE%9E%E4%BE%8B%E5%88%A0%E9%99%A4.png)
![集群删除](http://www.aiwenmo.com/dinky/dev/docs/%E9%9B%86%E7%BE%A4%E5%88%A0%E9%99%A4.png)
### 搜索
当用户集群实例配置完成后,配置的信息会显示在列表中,用户可以通过名称,别名,创建时间对配置的作业进行查找。
![搜索](http://www.aiwenmo.com/dinky/dev/docs/%E6%90%9C%E7%B4%A2.png)
## 集群配置管理
集群配置管理适用于 Yarn Per-job,Yarn Application 和 Kubernetes Application 这三种类型配置。
集群配置管理适用于 Yarn Per-job、Yarn Application 和 Kubernetes Application 这三种类型配置。
对于已经注册的集群配置,您可以对集群配置做编辑、删除和搜索等。
### 集群配置
首先进入**注册中心 > 集群管理 > 集群配置管理**,点击 **新建** 后,可以创建集群配置,参数配置完成后,点击 **测试****完成** 即可。
单击**注册中心 > 集群管理 > 集群配置管理 > 新建 **
![创建集群配置1](http://www.aiwenmo.com/dinky/dev/docs/%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE1.png)
![create_cluster_config_1](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/create_cluster_config_1.png)
![创建集群配置2](http://www.aiwenmo.com/dinky/dev/docs/%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE2.png)
![create_cluster_config_2](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/create_cluster_config_2.png)
**参数配置说明:**
......@@ -99,36 +77,28 @@
- **注释:** 自定义
- **是否启用:** 默认禁用,需要开启
参数配置完成后,点击 **测试**,会显示测试连接成功。
![集群测试](http://www.aiwenmo.com/dinky/dev/docs/%E9%9B%86%E7%BE%A4%E6%B5%8B%E8%AF%95.png)
待测试连接成功后,选择完成即可。至此集群配置成功,可连接远程集群进行作业提交。
### 集群编辑
当集群配置完成后,用户可以对集群配置做编辑修改。
首先进入 **注册中心 > 集群配置管理**,在列表中找到对应的集群名称,点击 **编辑** 后,维护集群配置
![集群配置编辑](http://www.aiwenmo.com/dinky/dev/docs/%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE%E7%BC%96%E8%BE%91.png)
![维护集群配置](http://www.aiwenmo.com/dinky/dev/docs/%E7%BB%B4%E6%8A%A4%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE.png)
### 集群删除
用户可以对所添加的集群配置进行删除。
## 查看集群信息
首先进入 **注册中心 > 集群配置管理**,在列表中找到对应的集群,点击 **删除** 后,删除集群
创建集群后可在**集群实例管理**后者**集群配置**中查看集群信息。
![集群配置删除](http://www.aiwenmo.com/dinky/dev/docs/%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE%E5%88%A0%E9%99%A4.png)
集群信息相关字段含义如下:
![删除集群配置](http://www.aiwenmo.com/dinky/dev/docs/%E5%88%A0%E9%99%A4%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE.png)
| 字段 | 说明 |
| :------------: | :----------------------------------------------------------: |
| 名称 | 名称是唯一的 |
| 别名 | 自定义 |
| 类型 | Standalone<br/>Yarn Session<br/>Yarn Per-job<br/>Yarn Application<br/>Kubernetes Session<br/>Kubernetes Application |
| JobManager地址 | Rest API地址 |
| 版本 | Flink 版本 |
| 状态 | 正常<br/> 异常 |
| 是否启用 | 已启用<br/> 已禁用 |
| 注册方式 | 手动<br/> 自动 |
| 最近更新时间 | 集群信息修改时间 |
| 操作 | 对集群做编辑、删除操作 |
### 搜索
:::warning 注意事项
当用户集群配置完成后,配置的信息会显示在列表中,用户可以通过名称,别名,创建时间对配置的作业进行查找。
当非Session类作业提交和发布后,作业会成为一个集群实例而存在
![搜索](http://www.aiwenmo.com/dinky/dev/docs/%E6%90%9C%E7%B4%A2.png)
:::
**说明:** 当集群配置的作业异步提交成功,可以看到所作业提交后的实例。同集群实例一样,可以对所在的集群实例进行回收,删除,编辑等操作。集群实例的操作步骤请查看集群实例管理部分。
---
position: 2
id: datasource_manage
title: 数据源管理
---
## 数据源管理列表
![database_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/database_manager/database_manager_list.png)
![database_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/datasource_manage/database_manager_list.png)
## 创建数据源
当用户使用 Dinky 做为数据开发工具时,用户首先需要进入 **注册中心 > 数据源管理**,点击 **新建** 即可。
![create_database_jdbc](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/database_manager/create_database_jdbc.png)
![create_database_jdbc](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/datasource_manage/create_database_jdbc.png)
![create_database_jdbc_mysql](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/database_manager/create_database_jdbc_mysql.png)
![create_database_jdbc_mysql](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/datasource_manage/create_database_jdbc_mysql.png)
**名称:** 输入英文唯一标识
......@@ -29,4 +35,5 @@
**是否启用:** 默认禁用,需要开启
当前数据库统一使用如上定义的参数名称配置数据源连接。当前支持的数据源可参考 [扩展数据源](/zh-CN/extend/datasource.md)章节。
当前数据库统一使用如上定义的参数名称配置数据源连接。当前支持的数据源详见 [扩展数据源](../../extend/function_expansion/datasource)
---
position: 3
id: document_manager
title: 文档管理
---
## 文档管理列表
![document_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/document_manager/document_manager_list.png)
![document_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/document_manager/document_manager_list.png)
## 查看文档描述
![document_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/document_manager/document_show_desc.png)
![document_manager_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/document_manager/document_show_desc.png)
## 创建文档
![create_document](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/document_manager/create_document.png)
![create_document](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/document_manager/create_document.png)
## 维护文档
![update_document](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/document_manager/update_document.png)
![update_document](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/document_manager/update_document.png)
**参数配置说明:**
......@@ -27,4 +34,4 @@
- **版本:** 文档版本 (必填) ;
**填充值提示效果:**
![show_hotkey_tips](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/document_manager/show_hotkey_tips.png)
![show_hotkey_tips](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/document_manager/show_hotkey_tips.png)
---
position: 4
id: jar_manager
title: Jar 管理
---
当您使用 jar 包提交 Flink 应用时,可以在 **jar管理** 中对所需 jar 进行管理。并可以对已经注册的 Jar 包做编辑、删除等操作。
## Jar包配置
**注册中心 > jar管理 > 新建 > 创建Jar配置**
![create_jar](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/jar_manager/create_jar.png)
![create_jar_config](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/jar_manager/create_jar_config.png)
**参数配置说明:**
- **Jar 配置:**
- **默认:** User App
- **文件路径:** 指定 HDFS 上的文件路径,即 Flink 提交的 jar 包
- **启动类:** 指定可执行 Jar 的启动类
- **执行参数:** 指定可执行 Jar 的启动类入参
- **基本配置:**
- **标识:** 英文唯一标识(必选)
- **名称:** 自定义
- **注释:** 自定义
- **是否启用:** 默认启用
Jar 包配置完成后,创建 **FlinkJar** 任务,详见。
## 查询 Jar 包管理信息
您可以对所添加的可执行 Jar 包做编辑、删除等操作。
Jar 包管理信息相关字段含义如下:
| 字段 | 说明 |
| :----------: | :--------------------------------------------: |
| 名称 | 名称唯一 |
| 别名 | 自定义 |
| 类型 | 默认 User App |
| 文件路径 | 指定 HDFS 上的文件路径,即 Flink 提交的 jar 包 |
| 启动类 | 指定可执行 Jar 的启动类 |
| 执行参数 | 指定可执行 Jar 的启动类入参 |
| 是否启用 | 已启用<br/> 已禁用 |
| 最近更新时间 | Jar 包的修改时间 |
| 操作 | 对 Jar 包修改、删除 |
:::warning 注意事项
目前 jar 包提交的方式只支持 Yarn Application 模式
:::
\ No newline at end of file
---
position: 5
id: warning
title: 报警管理
---
如何创建报警实例及报警组,在0.6版本以后,用户可以创建报警实例及报警组,监控 FlinkSQL 作业。一个报警组可以使用多个报警实例,用户就可以进一步收到报警通知。收到的报警通知如下:
- unknown
......@@ -8,35 +17,67 @@
首先要进入**注册中心** > **报警管理**,然后选择左侧的报警实例管理,创建一个告警实例。然后选择对应的报警插件。然后选择报警组管理,创建一个报警组。
目前Dinky支持的报警插件有:
- **[钉钉](#钉钉)方式告警 :** WebHook
- **[企业微信](#企业微信)方式告警 :** 包含 **应用** **群聊**
- **[飞书](#飞书)方式告警 :** WebHook
- **[邮箱](#邮箱)方式告警 :** 通过邮件发送报警通知
- **[钉钉](#钉钉)告警 :** WebHook
- **[企业微信](#企业微信)告警 :** 包含 **应用** **群聊**
- **[飞书](#飞书)告警 :** WebHook
- **[邮箱](#邮箱)告警 :** 通过邮件发送报警通知
## 报警实例管理
### 告警实例列表
![alert_instance_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/alert_instance_list.png)
### 创建报警实例
### 创建告警实例
**注册中心** > **报警管理**,选择**新建**
![create_alert_instance](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_alert_instance.png)
![create_alert_instance](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_alert_instance.png)
点击以上告警实例类型,创建报警实例配置。报警实例配置完成,就可以创建报警组。
### 查询报警实例信息
![alert_instance_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/alert_instance_list.png)
报警实例信息相关字段含义如下:
| 字段 | 说明 |
| :----------: | :-----------------------------------------: |
| 名称 | 名称唯一 |
| 类型 | WeChat<br/> DingTalk<br/> FeiShu<br/> Email |
| 是否启用 | 已启用<br/> 已禁用 |
| 最近更新时间 | 报警的修改时间 |
| 操作 | 对报警实例修改、删除 |
## 报警组管理
### 创建报警组
新建一个报警组,选择新建
![alert_group_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/alert_group_list.png)
![alert_group_list](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/alert_group_list.png)
![create_alert_group](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_alert_group.jpg)
### 查询报警组信息
报警组信息相关字段含义如下:
| 字段 | 说明 |
| :----------: | :------------------: |
| 名称 | 名称唯一 |
| 是否启用 | 已启用<br/> 已禁用 |
| 最近更新时间 | 报警的修改时间 |
| 操作 | 对报警实例修改、删除 |
![create_alert_group](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_alert_group.jpg)
## 报警类型
## 钉钉
### 钉钉
如果用户使用钉钉进行报警,请进入**注册中心** > **报警管理** > **报警实例管理**,点击**新建** 选择**钉钉**报警实例。
![create_dingdingtalk_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_dingdingtalk_alert.png)
![create_dingdingtalk_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_dingdingtalk_alert.png)
**参数配置:**
......@@ -53,13 +94,13 @@
[钉钉-开发者文档](https://open.dingtalk.com/document/robots/custom-robot-access)
## 企业微信
### 企业微信
如果用户使用企业微信进行报警,请进入**注册中心** > **报警管理** > **报警实例管理**,点击**新建** 选择**企业微信**报警实例。
### 微信企业应用配置
#### 微信企业应用配置
![create_wechat_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_wechat_app_alert.png)
![create_wechat_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_wechat_app_alert.png)
**参数配置:**
......@@ -73,9 +114,9 @@
- **展示方式类型:** 支持 MarkDown 和文本;
- **是否启用:** 默认禁用,需要开启;
### 微信企业群聊配置
#### 微信企业群聊配置
![create_wechat_chat_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_wechat_chat_alert.png)
![create_wechat_chat_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_wechat_chat_alert.png)
**参数配置:**
......@@ -97,13 +138,12 @@
发送消息对应文档中的 content,与此相对应的值的变量为 {msg}
## 飞书
### 飞书
如果用户使用飞书进行报警,请进入**注册中心** > **报警管理** > **报警实例管理**,点击**新建** 选择**飞书**报警实例。
![create_feishu_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_feishu_alert.png)
![create_feishu_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_feishu_alert.png)
**参数配置:**
......@@ -120,13 +160,12 @@
[飞书-自定义机器人接入开发文档](https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN)
## 邮箱
### 邮箱
如果用户使用邮箱进行报警,请进入**注册中心** > **报警管理** > **报警实例管理**,点击**新建** 选择**邮箱**报警实例。
![create_email_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/registerCenter/warning/create_email_alert.png)
![create_email_alert](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/warning/create_email_alert.png)
**参数配置:**
......@@ -153,4 +192,14 @@
- **展示方式类型:**
- 支持文本 表格 附件 附件+表格;
- PS: 需要注意的是 当选择 附件 || 附件+表格 时:
- **XLS存放目录:** 非必填 默认路径为: /tmp/xls
\ No newline at end of file
- **XLS存放目录:** 非必填 默认路径为: /tmp/xls
:::warning 注意事项
报警管理只适用于 FlinkSQL
报警管理只支持异步提交和发布
:::
\ No newline at end of file
{
"label": "数据开发",
"position": 1
}
---
sidebar_position: 6
id: catalog_manage
title: Catalog 管理
---
## Catalog 概述
当您使用 Flink 管理元数据时,Flink已提供了3种不同的 Catalog。具体 Flink 是如何定义 Catalog 的,详见 [Flink 官网](https://nightlies.apache.org/flink/flink-docs-master/zh/docs/dev/table/catalogs/)
另外 Dinky 提供了一种基于 Session会话级别的 Catalog。
## Hive Catalog
### 介绍
您可以在 Dinky 中使用 FlinkSQL 在作业中编写 Hive Catalog、查看 Hive 元数据、使用 Hive Catalog。将元数据信息保存到 Hive Metastore 以后,即可在数据开发的编辑器中开发作业。
### 版本说明
| Flink 版本 | 说明 |
| :--------: | :----------------------------------------------------------: |
| Flink1.11 | 详见[Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/catalogs.html)说明 |
| Flink1.12 | 详见[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/catalogs.html)说明 |
| Flink1.13 | 详见[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/dev/table/catalogs.html)说明 |
| Flink1.14 | 详见[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/dev/table/catalogs.html)说明 |
| Flink1.15 | 详见[Flink1.15](https://nightlies.apache.org/flink/flink-docs-release-1.15/dev/table/catalogs.html)说明 |
### 前提条件
已在 Hive Metastore 侧开启了 Hive Metastore 服务。
相关命令如下:
- `hive --service metastore`:开启 Hive Metastore 服务。
- `ps -ef|grep metastore`:查询 Hive Metastore 服务是否已开启
\ No newline at end of file
---
sidebar_position: 2
id: component_introduce
title: 方言介绍
---
目前支持的方言有:
- FlinkSql
- FlinkJar
......
---
sidebar_position: 1
id: function_introduce
title: 功能一览
---
通过查阅功能一览,您可以了解到数据开发中每个功能的含义。这有助于您更好的使用 Dinky 的数据开发功能。
单击**数据开发> 打开已创建的作业**
![function_intro](http://www.aiwenmo.com/dinky/docs/administrator_guide/studio/development_control/function_introduce/function_intro.png)
其中各个功能的含义如下:
| 功能名称 | 说明 |
| :-------------: | :-----------------------------: |
| 全屏开发 | |
| 保存 SQL | 保存当前的 FlinkSQL 及配置 |
| 导出 SQL | 导出当前的 sql 及配置 |
| 语法检查 | 检查当前的 Flinksql |
| Flinksql 执行图 | 获取当前的 Flinksql 的执行图 |
| 调试 | 执行当前的 sql |
| 异步提交 | 提交当前的 sql 到集群 |
| 发布作业 | 发布后无法修改 |
| 上线作业 | 上线后自动恢复、告警等生效 |
| 维护作业 | 可编辑作业 |
| 停止 | 停止作业 |
| 目录 | 用于创建作业及保存作业等 |
| 会话 | Session Catalog |
| 集群 | 修改及删除集群 |
| 元数据 | 获取字段信息、SQL 生成等 |
| 数据源 | 及删除数据源修改 |
| 作业配置 | FlinkSQL 配置信息 |
| 执行配置 | 预览数据 |
| 保存点 | 记录 Flink Savepoint 的创建时间 |
:::tip 说明
以上数据开发功能解释及说明,详见相关章节内容
:::
---
sidebar_position: 2
id: env_config
title: 环境配置
---
## Flink 环境配置
### Local
......@@ -8,19 +17,19 @@
根据 Flink 官网手动部署一个 Flink Standalone 集群,并注册到 **集群实例** 中。
如何注册 Standalone 集群,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)的集群实例管理。
如何注册 Standalone 集群,详见[集群管理](../register_center/cluster_manage) 的集群实例管理。
### Yarn Session 集群
根据 Flink 官网手动部署一个 Flink Yarn Session 集群,并注册到 **集群实例** 中。
如何注册 Yarn Session 集群,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)的集群实例管理。
如何注册 Yarn Session 集群,详见[集群管理](../register_center/cluster_manage)的集群实例管理。
### Yarn Per-Job 集群
**注册中心 > 集群管理 > 集群配置管理** 中注册 Hadoop 与 Flink 相关配置。
如何注册 Yarn Per-Job 的集群配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)的集群配置管理。
如何注册 Yarn Per-Job 的集群配置,详见[集群管理](../register_center/cluster_manage) 的集群配置管理。
### Yarn Application 集群
......@@ -28,13 +37,13 @@
2.将 dlink-app.jar 上传到 **系统设置 > Flink 设置** 中的 **提交 FlinkSQL 的 Jar 文件路径** 的 hdfs 配置地址。
如何注册 Yarn Application 的集群配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)的集群配置管理。
如何注册 Yarn Application 的集群配置,详见[集群管理](../register_center/cluster_manage) 的集群配置管理。
### Kubernetes Session 集群
根据 Flink 官网手动部署一个 Flink Kubernetes Session 集群,并暴露 **NodePort**, 注册到 **集群实例** 中。
如何注册 Kubernetes Session 集群,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)的集群实例管理。
如何注册 Kubernetes Session 集群, 详见[集群管理](../register_center/cluster_manage) 的集群实例管理。
### Kubernetes Application 集群
......@@ -42,10 +51,10 @@
2.将 dlink-app.jar 打包成完整的 Flink 镜像,在 **系统设置 > Flink 设置** 中的 **提交 FlinkSQL 的 Jar 文件路径** 的配置 dlink-app.jar 的 local 地址。
如何注册 Kubernetes Application 的集群配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)的集群配置管理。
如何注册 Kubernetes Application 的集群配置,详见[集群管理](../register_center/cluster_manage) 的集群配置管理。
## 其他数据源环境配置
手动部署外部数据源,然后注册到 **数据源管理**
如何注册外部数据源,请参考[数据源管理](/zh-CN/administrator_guide/register_center/datasource_manage.md)。当前 Dinky 支持的数据源请参考功能扩展中的[扩展数据源](/zh-CN/extend/datasource.md)
\ No newline at end of file
如何注册外部数据源,详见[数据源管理](../register_center/datasource_manage)。当前 Dinky 支持的数据源详见功能扩展中的[扩展数据源](../../extend/function_expansion/datasource)
\ No newline at end of file
---
sidebar_position: 2
id: job_config
title: 作业基础配置
---
Dinky 使用 Flink 社区开源版本,也完全兼容企业二次开发的 Flink 版本。本文介绍如何配置 Flink 的作业。
## 作业配置
FlinkSQL 作业配置,您可以根据具体需求配置参数,参数设置如下
| 类型 | 配置项 | 备注 |
| :------: | :------------: |:------------------------------------------------------------------------------------------------------------------------|
| 作业配置 | 执行模式 | 指定 FlinkSQL 的执行模式,默认为local |
| 作业配置 | Flink集群 | 此参数依据执行模式选择需要的集群实例或者集群配置 |
| 作业配置 | 作业名称 | 默认作业名,作业名称在当前项目中必须保持 **唯一** |
| 作业配置 | FlinkSQL 环境 | 选择当前 FlinkSQL 执行环境,会提前执行环境语句,默认无 |
| 作业配置 | 任务并行度 | 设置Flink任务的并行度,默认为 1 |
| 作业配置 | Insert 语句集 | 默认禁用,开启语句集机制,将多个 Insert 语句合并成一个JobGraph<br/> 进行提交,select 语句无效 |
| 作业配置 | 全局变量 | 默认禁用,开启 FlinkSQL 全局变量,以“${}”进行调用 |
| 作业配置 | 批模式 | 默认禁用,开启后启用 Batch Mode |
| 作业配置 | SavePoint 策略 | 默认禁用,策略包括:<br/> **最近一次**<br/> **最早一次**<br/> **指定一次** |
| 作业配置 | 报警组 | 报警组配置详见[报警管理](../register_center/warning) |
| 作业配置 | 其他配置 | 其他的 Flink 作业配置,具体可选参数,详见[Flink 官网](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/config/) |
:::tip 说明
FlinkSQL 执行模式除 local 外,还包括Standalone、Yarn Session、Yarn Per-Job、Yarn Application、Kubernetes Session、Kubernetes Application
:::
## 执行配置
另外 Dinky 提供了针对 FlinkSQL 查询预览的配置,,参数设置如下
| 类型 | 配置项 | 备注 |
| :------: | :------: | :----------------------------------------------------------: |
| 执行配置 | 预览结果 | 默认开启,开启预览结果将同步运行并返回数据结果 |
| 执行配置 | 打印流 | 默认禁用,开启打印流将同步运行并返回含有**op**字段信息的 ChangeLog<br/> 默认不开启则返回最终结果 |
| 执行配置 | 最大行数 | 预览数据的最大行数,默认100 |
| 执行配置 | 自动停止 | 默认禁用,开启自动停止将在捕获最大行记录数后自动停止 |
## 保存点
Dinky 提供 FlinkSQL 在通过 **cancel** 作业停止时,自动保存**savepoint**。并生成一个保存 savepoint 的创建时间。
:::tip 说明
​ 此保存点必须通过 **Flink Cancel** 完成
:::
---
sidebar_position: 1
id: job_hosting
title: 作业概述
---
Dinky 做为一站式的实时计算平台,可以托管 Flink 和数据库的作业。
## FlinkSQL
......@@ -10,7 +19,11 @@ Dinky 内置的 Flink MiniCluster,如果提交任务至 Local 模式则将在
**适用于:** 语法校验、查看 JobPlan、查看字段级血缘、执行资源占用非常小的批作业。
**注意:** 请不要提交流任务至 Local,如果提交了,你将无法关闭它,只能重启 Dinky。
:::warning 注意事项
请不要提交流任务至 Local,如果提交了,你将无法关闭它,只能重启 Dinky。
:::
### Standalone
......@@ -28,7 +41,11 @@ Dinky 将通过 JobManager 的 Rest 端口提交 FlinkSQL 作业至外部的 Fli
**适用于:** 作业资源共享,启动快,批作业、Flink OLAP 查询、资源占用小的流作业。
**注意:** 需要手动启动 Yarn Session 集群并注册到 Dinky 的集群实例,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)
:::tip 说明
需要手动启动 Yarn Session 集群并注册到 Dinky 的集群实例,详见[集群管理](../register_center/cluster_manage)
:::
### Yarn Per-Job
......@@ -38,7 +55,11 @@ Dinky 将通过 Yarn 来创建 Flink Yarn Per-Job 集群。
**适用于:** 资源占用较多的批作业和流作业。
**注意:** 需要在 Dinky 的集群配置中注册相关的 Hadoop 和 Flink 配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)
:::tip 说明
需要在 Dinky 的集群配置中注册相关的 Hadoop 和 Flink 配置,详见[集群管理](../register_center/cluster_manage)
:::
### Yarn Application
......@@ -48,7 +69,11 @@ Dinky 将通过 Yarn 来创建 Flink Yarn Application 集群。
**适用于:** 资源占用较多的批作业和流作业。
**注意:** 需要在 Dinky 的集群配置中注册相关的 Hadoop 和 Flink 配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)
:::tip 说明
需要在 Dinky 的集群配置中注册相关的 Hadoop 和 Flink 配置,详见[集群管理](../register_center/cluster_manage)
:::
### Kubernetes Session
......@@ -56,10 +81,14 @@ Dinky 将通过暴露的 NodePort 端口提交 FlinkSQL 作业至外部的 Flink
**特点:** 作业资源隔离,启动快,动态扩容。
**注意:** 需要在 Dinky 的集群配置中注册相关的 Kubernetes 和 Flink 配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)
**适用于:** 作业资源隔离,启动快,动态扩容,批作业、Flink OLAP 查询、资源占用小的流作业。
:::tip 说明
需要在 Dinky 的集群配置中注册相关的 Kubernetes 和 Flink 配置,详见[集群管理](../register_center/cluster_manage)
:::
### Kubernetes Application
Dinky 将通过 dlink-app 镜像创建的 Flink Kubernetes Application 集群。
......@@ -68,7 +97,11 @@ Dinky 将通过 dlink-app 镜像创建的 Flink Kubernetes Application 集群。
**适用于:** 作业资源隔离,启动慢,动态扩容,节约网络资源,资源占用较多的批作业和流作业。
**注意:** 需要在 Dinky 的集群配置中注册相关的 Kubernetes 和 Flink 配置,请参考[集群管理](/zh-CN/administrator_guide/register_center/cluster_manage.md)
:::tip 说明
需要在 Dinky 的集群配置中注册相关的 Kubernetes 和 Flink 配置,详见[集群管理](../register_center/cluster_manage)
:::
## DB SQL
......@@ -76,4 +109,9 @@ Dinky 将把 sql 提交到对应的数据源执行。
**适用于:** 原生 SQL 查询、执行。
**注意:** 需要在数据源中心注册数据库,请参考[数据源管理](/zh-CN/administrator_guide/register_center/datasource_manage.md)
\ No newline at end of file
:::tip 说明
需要在数据源中心注册数据库,详见[数据源管理](../register_center/datasource_manage)
:::
---
sidebar_position: 5
id: job_log
title: 作业日志
---
## 查看启动和运行日志
在作业为运行状态时,您可以查看其启动日志和运行日志。
| 类型 | 说明 |
| :------: | :----------------------------------------------------------: |
| 启动日志 | FlinkSQL 作业启动时的日志,即从FlinkSQL 环境被初始化一直到Job Manager被启动起来中间日志 |
| 运行日志 | Flink的Job Manager和Task Managers的日志可以运维中心查看,也可以在Flink UI界面查看 |
:::tip 说明
启动日志中包含启动作业失败的原因,例如 SQL字段不一致,资源不足等
:::
---
sidebar_position: 4
id: job_monitoring
title: 作业监控
---
## 查看作业监控信息
对于正在运行(或者曾经成功运行过)的流计算作业,用户有两种方式查看监控信息。如下:
- **运维中心**
- **Flink Dashboard**
## 配置作业监控告警
详见注册中心的[报警管理](../../administrator_guide/register_center/warning)
## 查看作业 Flink 监控指标
处于运行中状态的作业可以查看该作业的 监控指标,作业的监控有两个入口
- **运维中心**
- **Flink Dashboard**
:::tip 说明
查看 Flink 监控指标详见**运维中心**[监控指标一览](../devops_center/indicators_list)
:::
\ No newline at end of file
---
sidebar_position: 3
id: job_submit
title: 作业提交
---
本文为您介绍如何提交 FlinkSQL 作业至集群,以及 DB SQL提交至数据库。Dinky 提供了三种提交作业的方式,分别是:
- 执行当前SQL
- 异步提交
- 上线下线发布
各提交作业的支持的执行模式及说明如下
| SQL类型 | 提交方式 | 执行模式 | 说明 |
| :------: | :----------: | :----------------------------------------------------------: | :---------------------------------------------------------- |
| FlinkSQL | 执行当前SQL | local<br/> Standalone<br/> Yarn Session<br/> Kubernetes Session | 适用场景:`调试作业` |
| FlinkSQL | 异步提交 | Standalone<br/> Yarn Session<br/> Yarn Per-job<br/> Yarn Application<br/> Kubernetes Session<br/> Kubernetes Application | 适用场景:`远程提交作业至集群` |
| FlinkSQL | 上线下线发布 | Standalone<br/> Yarn Session<br/> Yarn Per-job<br/> Yarn Application<br/> Kubernetes Session<br/> Kubernetes Application | 适用场景:<br/>1.`远程发布作业至集群`<br/>2.`维护及监控作业` |
| DB SQL | 执行当前SQL | - | 适用场景:`调试作业` |
| DB SQL | 异步提交 | - | 适用场景:`提交作业至数据库` |
**执行当前SQL如下**
![execute_current_sql](http://www.aiwenmo.com/dinky/docs/administrator_guide/studio/job_ops/job_submit/execute_current_sql.png)
**异步提交**
![async_commit](http://www.aiwenmo.com/dinky/docs/administrator_guide/studio/job_ops/job_submit/async_commit.png)
**上线下线发布**
![publish](http://www.aiwenmo.com/dinky/docs/administrator_guide/studio/job_ops/job_submit/publish.png)
:::tip 说明
- FlinkSQL 执行当前SQL与异步提交区别在于执行当前SQL适合调试作业,而异步提交适合提交作业到集群;
- FlinkSQL 异步提交与上线下线发布,异步提交无法接收告警,而上线下线发布可以接收告警并可以维护作业和在运维中心监控作业;
- DB SQL 执行当前SQL与异步提交区别在于执行当前SQL适合调试作业并可以看到错误信息,而异步提交只显示作业提交失败;
:::
---
sidebar_position: 5
id: metadata
title: 元数据管理
---
当用户查看或者使用数据源中的 DDL 或者 DML ,可通过元数据中心获取数据源中的相关 DDL 或者 DML。目前元数据中心包含:
- **表信息**
......@@ -14,26 +21,26 @@
首先进入**数据开发**中的**元数据**,选择已经配置好的数据源,会出现数据源对应的schema。
![metadata_page](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/metadata/metadata_page.png)
![metadata_page](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/metadata/metadata_page.png)
出现以上 schema 后,查看 schema 下的表,**右键单击 schema 下的表**即可看到表信息,字段信息及 SQL 生成。
### 表信息
![metadata_table_info](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/metadata/metadata_table_info.png)
![metadata_table_info](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/metadata/metadata_table_info.png)
### 字段信息
![metadata_columns_info](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/metadata/metadata_columns_info.png)
![metadata_columns_info](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/metadata/metadata_columns_info.png)
### SQL生成
![metadata_gen_flinkddl](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/metadata/metadata_gen_flinkddl.png)
![metadata_gen_flinkddl](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/metadata/metadata_gen_flinkddl.png)
![metadata_gen_selectsql](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/metadata/metadata_gen_selectsql.png)
![metadata_gen_selectsql](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/metadata/metadata_gen_selectsql.png)
![metadata_gen_createtable_sql](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/metadata/metadata_gen_createtable_sql.png)
![metadata_gen_createtable_sql](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/metadata/metadata_gen_createtable_sql.png)
**如何配置数据源请参考** [数据源管理](/zh-CN/administrator-guide/registerCenter/datasource_manage.md)
**如何配置数据源详见** [数据源管理](../register_center/datasource_manage)
---
sidebar_position: 7
id: openapi
title: Open API
---
Dinky 平台提供 OpenAPI 能力,通过调用 Dinky 的 OpenAPI 可以使用 Dinky 的功能,实现应用和 Dinky 的集成和交互。
### 背景
......@@ -366,4 +372,6 @@ http://127.0.0.1:8888/openapi/savepointTask
http://127.0.0.1:8888/openapi/submitTask?id=1
```
OpenAPI 包括元数据、数据开发、数据集成、运维中心、数据质量、数据服务等。其中数据开发已经开发完成,其他根据版本发布会逐步实现。如果您在数据开发过程中需要使用 Dinky OpenAPI,使用方式请参见示例。
\ No newline at end of file
:::tip 说明
OpenAPI 包括元数据、数据开发、数据集成、运维中心、数据质量、数据服务等。其中数据开发已经开发完成,其他根据版本发布会逐步实现。如果您在数据开发过程中需要使用 Dinky OpenAPI,使用方式请参见示例。
:::
\ No newline at end of file
{
"label": "系统设置",
"position": 5
}
---
position: 2
id: flink_setting
title: Flink 设置
---
当用户使用 **Application 模式**以及 **RestAPI** 时,需要在 **Flink 设置** 页面进行相关修改。
另外**Application 模式** 支持**Yarn****Kubernetes**,启用 **RestAPI** 后,Flink 任务的 savepoint,停止等操作都将会通过 JobManager 的 RestAPI 进行。
首先进入**系统设置**中的**Flink设置**,对参数配置进行修改即可。
![flink_setting](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/Flink_Setting/flink_setting.png)
![flink_setting](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/system_setting/flink_setting/flink_setting.png)
**参数配置说明:**
......
系统设置中的用户管理功能,包含添加或删除用户、修改密码等。此用户管理中的用户仅限于登录 Dinky 界面。
---
position: 1
id: user_management
title: 用户管理
---
**默认用户名/密码:** admin/admin
## 用户管理
![user_manager](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/user_manager.png)
系统设置中的用户管理功能,包含添加或删除用户、修改密码等。此用户管理中的用户仅限于登录 Dinky 界面。
**默认用户名/密码:** admin/admin
## 添加用户
当用户使用非admin用户登录时,可以添加一个新用户,通过新用户登录Dinky。
- **普通用户**创建好后,**默认密码****123456**
- 如果需要修改密码,请查看[修改密码](#密码修改)
进入 **系统设置**,选择 **用户管理****新建**
进入 **系统设置 > 用户管理 > 新建**
![create_user](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/create_user.png)
![create_user](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/system_setting/user_management/create_user.png)
**参数配置:**
......@@ -25,26 +29,6 @@
- **手机号:** 用户使用的手机号;
- **是否启用:** 默认禁用,需要开启;
## 删除用户
但用户不使用某个创建的普通用户时,可以进行删除。首先进入 **系统设置**,选择 **用户管理**,点击对应用户的**删除**即可。
![delete_user](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/delete_user.png)
![delete_user_ok](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/delete_user_ok.png)
**说明:** admin 用户在 Dinky 是最高权限用户,无法删除,只能修改密码
## 用户配置及编辑
用户配置或者编辑是为了用户修改用户的基本信息,首先进入 **系统设置**,选择 **用户管理**,点击对应用户的**配置**或者**编辑**。接下来就可以维护用户信息。
![update_user](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/update_user.png)
## 密码修改
- 普通用户创建好后,**默认密码****123456**
......@@ -52,23 +36,34 @@
首先进入 **系统设置**,选择 **用户管理**,点击对应用户的密码修改即可。
![update_passwd](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/update_passwd.png)
![update_passwd_ok](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/update_passwd_ok.png)
![update_passwd](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/system_setting/user_management/update_passwd.png)
![update_passwd_ok](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/system_setting/user_management/update_passwd_ok.png)
当密码修改成功后,用户可以选择界面**右上角****退出登录**,既可通过新密码登录 Dinky。
![loginout](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/loginout.png)
## 用户管理
![login](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator-guide/system_setting/user_management/login.png)
当您添加用户后,可以对用户做修改、删除和修改密码等操作。
![user_manager](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/system_setting/user_management/user_manager.png)
用户管理相关字段含义如下:
| 字段 | 说明 |
| :----------: | :----------------------------------: |
| 用户名 | 自定义 |
| 昵称 | 自定义 |
| 工号 | 唯一值 |
| 手机号 | 用户使用的手机号 |
| 是否启用 | 已启用<br/> 已禁用 |
| 最近更新时间 | 用户信息的修改时间 |
| 操作 | 对用户信息做编辑、删除、修改密码操作 |
:::warning 注意事项
​ admin 用户在 Dinky 是最高权限用户,无法删除,只能修改密码
:::
{
"label": "编译和部署",
"position": 4
}
---
sidebar_position: 1
id: build
title: 编译
---
## 环境准备
| **环境** | **版本** | 备注 |
......@@ -7,7 +15,7 @@
| jdk | 1.8.0_201 | |
| maven | 3.6.3 | |
| lombok | 1.18.16 | 如果在idea编译,需要自行安装 插件 |
| mysql | 5.6+ | |
| mysql | 5.7+ | |
## NodeJS 安装部署
......@@ -46,7 +54,7 @@ npm install -g npm@7.19.0
## MySQL 部署
MySQL版本选择5.6+
MySQL版本选择5.7+
### Windows 版本
......@@ -56,7 +64,7 @@ MySQL版本选择5.6+
### Linux 版本
[下载地址]( [http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm](http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm))
[下载地址](http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm)
下载完成后,安装配置即可,操作如下:
......@@ -183,7 +191,7 @@ maven ->> dlink->> 生命周期->> 跳过测试 ->> 双击install
打包完成后 安装包见项目根下 build 文件夹下
```
说明:如果要对 Dinky 做二次开发,请参考[开发调试](/zh-CN/developer_guide/debug.md)
说明:如果要对 Dinky 做二次开发,详见开发者指南中的[本地调试](../developer_guide/local_debug)
### Linux 编译
......@@ -196,7 +204,25 @@ mvn clean install -Dmaven.test.skip=true
切换到 Dinky 根目录下得 build 文件夹下,即可出现编译后的安装包。
以上就是 Dinky 源码编译的详细步骤,Dinky 如何安装部署,请查看下一章节[Dinky部署](/zh-CN/quick_start/deploy.md)
### 构建 Docker 镜像
基于Dinky每次发布的[ Release ](http://www.dlink.top/download/download)构建:
1.`Dockerfile``docker-entrypoint.sh`文件拷贝至release包解压目录
2. 执行下述构建与推送命令,根据需要推送至公共或私有仓库
```bash
docker build --tag ylyue/dinky:0.6.4-flink1.15 .
docker push ylyue/dinky:0.6.4-flink1.15
docker login --username=xxxxxxxx registry.cn-beijing.aliyuncs.com
docker tag ylyue/dinky:0.6.4-flink1.15 registry.cn-beijing.aliyuncs.com/yue-open/dinky:0.6.4-flink1.15
docker push registry.cn-beijing.aliyuncs.com/yue-open/dinky:0.6.4-flink1.15
```
[👉已构建的 DockerHub 仓库](https://hub.docker.com/r/ylyue/dinky)
以上就是 Dinky 源码编译的详细步骤,Dinky 如何安装部署,请查看下一章节[部署](./deploy)
......
## 单机部署
---
sidebar_position: 2
id: deploy
title: 部署
---
## Linux 单机部署
### 解压到指定目录
......@@ -12,7 +19,7 @@ cd dlink
### 初始化数据库
Dinky 采用 mysql 作为后端的存储库,mysql 支持 5.6+。这里假设你已经安装了 mysql 。首先需要创建 Dinky 的后端数据库,这里以配置文件中默认库创建。
Dinky 采用 mysql 作为后端的存储库,mysql 支持 5.7+。这里假设你已经安装了 mysql 。首先需要创建 Dinky 的后端数据库,这里以配置文件中默认库创建。
```
#登录mysql
......@@ -207,10 +214,48 @@ $sh auto.sh status
默认用户名/密码: admin/admin
## 高可用部署
敬请期待
:::tip 说明
Dinky 部署需要 MySQL5.7 以上版本
Dinky 不依赖于 Nginx, Nginx 可选
:::
## Docker部署
[👉DockerHub](https://hub.docker.com/r/ylyue/dinky)
### Docker 部署参考命令:
```bash
docker run -it --name=dinky -p8888:8888 \
-e spring.datasource.url=jdbc:mysql://localhost:3306/dlink?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true \
-e spring.datasource.username=root \
-e spring.datasource.password=11eb441842a9491c90168c6f76c2eed4 \
-v /opt/docker/dinky/plugins:/opt/dinky/plugins \
-v /opt/docker/dinky/lib:/opt/dinky/lib \
-v /opt/docker/dinky/jar:/opt/dinky/jar \
registry.cn-beijing.aliyuncs.com/yue-open/dinky:0.6.4-flink1.15
```
### 环境变量与挂载点:
- SpringBoot 标准项目,`-e`可以用于替换[application.yml](https://gitee.com/DataLinkDC/Dinky/blob/0.6.4/dlink-admin/src/main/resources/application.yml)文件中的配置
- `/opt/dinky/plugins`挂载点,用于挂载Flink SQL开发中需要依赖的jar包
- `/opt/dinky/lib`挂载点(非必须),用于挂载Dinky内部组件,当你需要时再挂载出来
- `/opt/dinky/jar`挂载点(非必须),用于挂载dlink application模式提交sql用到的jar,当你需要时再挂载出来
### MySQL 数据库的初始化脚本:
- [👉Gitee Releases 界面](https://gitee.com/DataLinkDC/Dinky/releases)下载对应版本的releases包,获得Mysql初始化脚本
- [👉Dinky官网 Releases 界面](http://www.dlink.top/download/download)下载对应版本的releases包,获得Mysql初始化脚本
- mysql需自行部署8.x版本,参考:[👉Centos Docker MySQL8 安装与初始化配置](https://blog.csdn.net/u013600314/article/details/80521778?spm=1001.2014.3001.5502)
:::tip 版本号0.6.4-flink1.15:
- `0.6.4`代表Dinky版本号
- `flink1.15`代表Flink版本号,即默认提供了flink1.15的相关默认依赖,你任然可以替换`plugins、lib、jar`挂载点的相关依赖包,使之支持Flink其他版本,如:flink:1.15-scala_2.12.15
:::
:::tip Dinky与Flink:
- 此镜像仓库只是让你部署起了 Dinky 开发平台,因此你任然还需部署 Flink 集群
- Flink集群部署参考 [Flink官方文档](https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/deployment/resource-providers/standalone/docker/)
:::
......
---
sidebar_position: 16
id: comminicate
title: 交流与贡献
---
欢迎您加入社区交流分享,也欢迎您为社区贡献自己的力量。
在此非常感谢大家的支持~
......@@ -10,4 +16,4 @@ QQ社区群:**543709668**,申请备注 “ Dinky ”,不写不批
- **微信搜索公众号:** `DataLink数据中台`
- **扫码关注公众号:** 扫下图二维码,关注公众号
![DataLink数据中台](http://www.aiwenmo.com/dinky/docs/zh-CN/others/comminicate/datalink.jpg)
\ No newline at end of file
![DataLink数据中台](http://www.aiwenmo.com/dinky/docs/zh-CN/comminicate/datalink.jpg)
\ No newline at end of file
{
"label": "概念和架构",
"position": 2
}
---
sidebar_position: 1
id: architecture
title: 系统架构
---
![Dinky](http://www.aiwenmo.com/dinky/docs/zh-CN/concept_architecture/architecture/dinky.png)
<big>**JobManager**</big>
---
sidebar_position: 2
id: concept
title: 基本概念
---
**JobManager**
JobManager 作为 Dinky 的作业管理的统一入口,负责 Flink 的各种作业执行方式及其他功能的调度。
<big>**Executor**</big>
**Executor**
Executor 是 Dinky 定制的 FlinkSQL 执行器,来模拟真实的 Flink 执行环境,负责 FlinkSQL 的 Catalog 管理、UDF管理、片段管理、配置管理、语句集管理、语法校验、逻辑验证、计划优化、生成 JobGraph、本地执行、远程提交、SELECT 及 SHOW 预览等核心功能。
<big>**Interceptor**</big>
**Interceptor**
Interceptor 是 Dinky 的 Flink 执行拦截器,负责对其进行片段解析、UDF注册、SET 和 AGGTABLE 等增强语法解析。
<big>**Gateway**</big>
**Gateway**
Gateway 并非是开源项目 flink-sql-gateway,而是 Dinky 自己定制的 Gateway,负责进行基于 Yarn 环境的任务提交与管理,主要有Yarn-Per-Job 和 Yarn-Application 的 FlinkSQL 提交、停止、SavePoint 以及配置测试,而 User Jar 目前只开放了 Yarn-Application 的提交。
<big>**Flink SDK**</big>
**Flink SDK**
Dinky 主要通过调用 flink-client 和 flink-table 模块进行二次开发。
<big>**Yarn SDK**</big>
**Yarn SDK**
Dinky 通过调用 flink-yarn 模块进行二次开发。
<big>**Flink API**</big>
**Flink API**
Dinky 也支持通过调用 JobManager 的 RestAPI 对任务进行管理等操作,系统配置可以控制开启和停用。
<big>**Local**</big>
**Local**
Dinky 自身的 Flink 环境,通过 plugins 下的 Flink 依赖进行构建,主要用于语法校验和逻辑检查、生成 JobPlan 和 JobGraph、字段血缘分析等功能。
注意:目前请不要用该模式执行或提交流作业,将会无法关闭,需要重启进程才可。
<big>**Standalone**</big>
**Standalone**
Dinky 通过已注册的 Flink Standalone 集群实例可以对远程集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。
<big>**Yarn-Session**</big>
**Yarn-Session**
Dinky 通过已注册的 Flink Yarn Session 集群实例可以对远程集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。
<big>**Yarn-Per-Job**</big>
**Yarn-Per-Job**
Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例,然后将 Local 模式解析生成的 JobGraph 与 Configuration 提交至 Yarn 来创建 Flink Per-Job 应用。
<big>**Yarn-Application**</big>
**Yarn-Application**
Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对于 User Jar,将 Jar 相关配置与 Configuration 提交至 Yarn 来创建 Flink-Application 应用;对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和 dlink-app.jar 以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。
<big>**Kubernetes-Session**</big>
**Kubernetes-Session**
Dinky 通过已注册的 Flink Kubernetes Session 集群实例可以对远程集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。
注意需要暴露 NodePort。
<big>**Kubernetes-Application**</big>
**Kubernetes-Application**
Dinky 通过已注册的集群配置来获取对应的 FlinkKubeClient 实例。对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和定制的 dlink-app.jar 镜像以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。
注意需要自己打包 dlink-app 镜像,具体见文章。
{
"label": " Connector",
"position": 11
}
---
sidebar_position: 1
id: flinksql_connectors
title: FlinkSQL Connectors
---
Flink做为实时计算引擎,支持非常丰富的上下游存储系统的 Connectors。并从这些上下系统读写数据并进行计算。对于这些 Connectors 在 Flink 中统一称之为数据源(Source) 端和 目标(Sink) 端。
- 数据源(Source)指的是输入流计算系统的上游存储系统来源。在当前的 FlinkSQL 模式的作业中,数据源可以是消息队列 Kafka、数据库 MySQL 等。
- 目标(Sink)指的是流计算系统输出处理结果的目的地。在当前的流计算 FlinkSQL 模式的作业中,目标端可以是消息队列 Kafka、数据库 MySQL、OLAP引擎 Doris、ClickHouse 等。
Dinky 实时计算平台支持支持 Flink 1.11、Flink 1.12、Flink 1.13、Flink 1.14 和 Flink 1.15 五个版本,对应的版本支持所有开源的上下游存储系统具体Connector信息详见Flink开源社区:
- [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/connectors/)
- [Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/connectors/)
- [Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/connectors/table/overview/)
- [Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/connectors/table/overview/)
- [Flink1.15](https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/connectors/table/overview/)
另外非 Flink 官网支持的 Connector 详见 github:
- [Flink-CDC](https://github.com/ververica/flink-cdc-connectors/releases/)
- [Hudi](https://github.com/apache/hudi/releases)
- [Iceberg](https://github.com/apache/iceberg/releases)
- [Doris](https://github.com/apache/incubator-doris-flink-connector/tags)
- [Starrocks](https://github.com/StarRocks/flink-connector-starrocks/releases)
- [ClickHouse](https://github.com/itinycheng/flink-connector-clickhouse)
- [Pulsar](https://github.com/streamnative/pulsar-flink/releases)
{
"label": "数据集成指南",
"position": 9
}
---
sidebar_position: 7
id: cdcsource_statements
title: CDCSOURCE 整库同步
---
## 设计背景
目前通过 FlinkCDC 进行会存在诸多问题,如需要定义大量的 DDL 和编写大量的 INSERT INTO,更为严重的是会占用大量的数据库连接,对 Mysql 和网络造成压力。
Dinky 定义了 CDCSOURCE 整库同步的语法,该语法和 CDAS 作用相似,可以直接自动构建一个整库入仓入湖的实时任务,并且对 source 进行了合并,不会产生额外的 Mysql 及网络压力,支持对任意 sink 的同步,如 kafka、doris、hudi、jdbc 等等
## 原理
### source 合并
![source_merge](http://www.aiwenmo.com/dinky/docs/zh-CN/data_integration_guide/cdcsource_statementssource_merge.png)
面对建立的数据库连接过多,Binlog 重复读取会造成源库的巨大压力,上文分享采用了 source 合并的优化,尝试合并同一作业中的 source,如果都是读的同一数据源,则会被合并成一个 source 节点。
​ Dinky 采用的是只构建一个 source,然后根据 schema、database、table 进行分流处理,分别 sink 到对应的表。
### 元数据映射
Dinky 是通过自身的数据源中心的元数据功能捕获源库的元数据信息,并同步构建 sink 阶段 datastream 或 tableAPI 所使用的 FlinkDDL。
![meta_mapping](http://www.aiwenmo.com/dinky/docs/zh-CN/data_integration_guide/cdcsource_statementsmeta_mapping.png)
### 多种 sink 方式
Dinky 提供了各式各样的 sink 方式,通过修改语句参数可以实现不同的 sink 方式。Dinky 支持通过 DataStream 来扩展新的 sink,也可以使用 FlinkSQL 无需修改代码直接扩展新的 sink。
![sink](http://www.aiwenmo.com/dinky/docs/zh-CN/data_integration_guide/cdcsource_statementssink.png)
## EXECUTE CDCSOURCE 基本使用
CDCSOURCE 语句用于将上游指定数据库的所有表的数据采用一个任务同步到下游系统。
### 语法结构
```sql
EXECUTE CDCSOURCE jobname
WITH ( key1=val1, key2=val2, ...)
```
### With 参数说明
WITH 参数通常用于指定 CDCSOURCE 所需参数,语法为`'key1'='value1', 'key2' = 'value2'`的键值对。
**配置项**
| 配置项 | 是否必须 | 默认值 | 说明 |
| ----------------- | -------- | ------------- | ------------------------------------------------------------ |
| connector | 是 | 无 | 指定要使用的连接器,当前支持 mysql-cdc 及 oracle-cdc |
| hostname | 是 | 无 | 数据库服务器的 IP 地址或主机名 |
| port | 是 | 无 | 数据库服务器的端口号 |
| username | 是 | 无 | 连接到数据库服务器时要使用的数据库的用户名 |
| password | 是 | 无 | 连接到数据库服务器时要使用的数据库的密码 |
| scan.startup.mode | 否 | latest-offset | 消费者的可选启动模式,有效枚举为“initial”和“latest-offset” |
| database-name | 否 | 无 | 如果table-name="test\\.student,test\\.score",此参数可选。 |
| table-name | 否 | 无 | 支持正则,示例:"test\\.student,test\\.score" |
| source.* | 否 | 无 | 指定个性化的 CDC 配置,如 source.server-time-zone 即为 server-time-zone 配置参数。 |
| checkpoint | 否 | 无 | 单位 ms |
| parallelism | 否 | 无 | 任务并行度 |
| sink.connector | 是 | 无 | 指定 sink 的类型,如 datastream-kafka、datastream-doris、datastream-hudi、kafka、doris、hudi、jdbc 等等,以 datastream- 开头的为 DataStream 的实现方式 |
| sink.sink.db | 否 | 无 | 目标数据源的库名,不指定时默认使用源数据源的库名 |
| sink.table.prefix | 否 | 无 | 目标表的表名前缀,如 ODS_ 即为所有的表名前拼接 ODS_ |
| sink.table.suffix | 否 | 无 | 目标表的表名后缀 |
| sink.table.upper | 否 | 无 | 目标表的表名全大写 |
| sink.table.lower | 否 | 无 | 目标表的表名全小写 |
| sink.* | 否 | 无 | 目标数据源的配置信息,同 FlinkSQL,使用 ${schemaName} 和 ${tableName} 可注入经过处理的源表名 |
## 示例
**实时数据合并至一个 kafka topic**
```sql
EXECUTE CDCSOURCE jobname WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'dlink',
'password' = 'dlink',
'checkpoint' = '3000',
'scan.startup.mode' = 'initial',
'parallelism' = '1',
'table-name' = 'test\.student,test\.score',
'sink.connector'='datastream-kafka',
'sink.topic'='dlinkcdc',
'sink.brokers'='127.0.0.1:9092'
)
```
**实时数据同步至对应 kafka topic**
```sql
EXECUTE CDCSOURCE jobname WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'dlink',
'password' = 'dlink',
'checkpoint' = '3000',
'scan.startup.mode' = 'initial',
'parallelism' = '1',
'table-name' = 'test\.student,test\.score',
'sink.connector'='datastream-kafka',
'sink.brokers'='127.0.0.1:9092'
)
```
**实时数据 DataStream 入仓 Doris**
```sql
EXECUTE CDCSOURCE jobname WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'dlink',
'password' = 'dlink',
'checkpoint' = '3000',
'scan.startup.mode' = 'initial',
'parallelism' = '1',
'table-name' = 'test\.student,test\.score',
'sink.connector' = 'datastream-doris',
'sink.fenodes' = '127.0.0.1:8030',
'sink.username' = 'root',
'sink.password' = 'dw123456',
'sink.sink.batch.size' = '1',
'sink.sink.max-retries' = '1',
'sink.sink.batch.interval' = '60000',
'sink.sink.db' = 'test',
'sink.table.prefix' = 'ODS_',
'sink.table.upper' = 'true',
'sink.sink.enable-delete' = 'true'
)
```
**实时数据 FlinkSQL 入仓 Doris**
```sql
EXECUTE CDCSOURCE jobname WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'dlink',
'password' = 'dlink',
'checkpoint' = '3000',
'scan.startup.mode' = 'initial',
'parallelism' = '1',
'table-name' = 'test\.student,test\.score',
'sink.connector' = 'doris',
'sink.fenodes' = '127.0.0.1:8030',
'sink.username' = 'root',
'sink.password' = 'dw123456',
'sink.sink.batch.size' = '1',
'sink.sink.max-retries' = '1',
'sink.sink.batch.interval' = '60000',
'sink.sink.db' = 'test',
'sink.table.prefix' = 'ODS_',
'sink.table.upper' = 'true',
'sink.table.identifier' = '${schemaName}.${tableName}',
'sink.sink.enable-delete' = 'true'
)
```
**实时数据入湖 Hudi**
```sql
EXECUTE CDCSOURCE demo WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'root',
'password' = '123456',
'source.server-time-zone' = 'UTC',
'checkpoint'='1000',
'scan.startup.mode'='initial',
'parallelism'='1',
'database-name'='data_deal',
'table-name'='data_deal\.stu,data_deal\.stu_copy1',
'sink.connector'='hudi',
'sink.path'='hdfs://cluster1/tmp/flink/cdcdata/${tableName}',
'sink.hoodie.datasource.write.recordkey.field'='id',
'sink.hoodie.parquet.max.file.size'='268435456',
'sink.write.precombine.field'='update_time',
'sink.write.tasks'='1',
'sink.write.bucket_assign.tasks'='2',
'sink.write.precombine'='true',
'sink.compaction.async.enabled'='true',
'sink.write.task.max.size'='1024',
'sink.write.rate.limit'='3000',
'sink.write.operation'='upsert',
'sink.table.type'='COPY_ON_WRITE',
'sink.compaction.tasks'='1',
'sink.compaction.delta_seconds'='20',
'sink.compaction.async.enabled'='true',
'sink.read.streaming.skip_compaction'='true',
'sink.compaction.delta_commits'='20',
'sink.compaction.trigger.strategy'='num_or_time',
'sink.compaction.max_memory'='500',
'sink.changelog.enabled'='true',
'sink.read.streaming.enabled'='true',
'sink.read.streaming.check.interval'='3',
'sink.hive_sync.enable'='true',
'sink.hive_sync.mode'='hms',
'sink.hive_sync.db'='cdc_ods',
'sink.hive_sync.table'='${tableName}',
'sink.table.prefix.schema'='true',
'sink.hive_sync.metastore.uris'='thrift://cdh.com:9083',
'sink.hive_sync.username'='flinkcdc'
)
```
:::tip 说明
- 按照示例格式书写,且一个 FlinkSQL 任务只能写一个 CDCSOURCE。
- 配置项中的英文逗号前不能加空格,需要紧随右单引号。
- 禁用全局变量、语句集、批模式。
- 目前不支持 Application 模式,后续支持。
:::
\ No newline at end of file
{
"label": "开发者指南",
"position": 12
}
{
"label": "参与贡献",
"position": 1
}
---
sidebar_position: 6
id: commit_code
title: 提交代码须知
---
# 提交代码
* 首先从远端仓库 *https://github.com/DataLinkDC/dlink.git* fork 一份代码到自己的仓库中
......
---
sidebar_position: 5
id: commit_message
title: Commit Message 须知
---
一个好的 commit message 是能够帮助其他的开发者(或者未来的开发者)快速理解相关变更的上下文,同时也可以帮助项目管理人员确定该提交是否适合包含在发行版中。但当我们在查看了很多开源项目的 commit log 后,发现一个有趣的问题,一部分开发者,代码质量很不错,但是 commit message 记录却比较混乱,当其他贡献者或者学习者在查看代码的时候,并不能通过 commit log 很直观的了解
该提交前后变更的目的,正如 Peter Hutterer 所言:Re-establishing the context of a piece of code is wasteful. We can’t avoid it completely, so our efforts should go to reducing it as much as possible. Commit messages can do exactly that and as a result, a commit message shows whether a developer is a good collaborator. 因此,DolphinScheduler 结合其他社区以及 Apache 官方文档制定了该规约。
......
---
sidebar_position: 2
id: document
title: 文档贡献
---
良好的使用文档对任何类型的软件都是至关重要的。欢迎任何可以改进 Dinky 文档的贡献。
### 获取文档项目
Dinky 项目的文档维护在源码 docs 目录中
Dinky 项目的文档维护在 [dinky-website](https://github.com/DataLinkDC/dinky-website)
首先你需要先将源项目 fork 到自己的 github 仓库中,然后将 fork 的文档克隆到本地计算机中。
```shell
git clone https://github.com/<your-github-user-name>/dlink
git clone https://github.com/<your-github-user-name>/dinky-website
```
### 文档环境
Dinky 网站由 [docsify](https://docsify.js.org/#/zh-cn/quickstart) 提供支持。
Docusaurus 网站由 [Docusaurus](https://docusaurus.io/docs/category/getting-started) 提供支持。
请确保你已经安装了 nodejs 和 npm 。详细安装步骤可以查阅本地调试。
......@@ -20,10 +29,10 @@ Dinky 网站由 [docsify](https://docsify.js.org/#/zh-cn/quickstart) 提供支
在 Dinky 的根目录下执行:
```shell
# 推荐全局安装 docsify-cli 工具
npm i docsify-cli -g
# 运行 docsify serve 启动一个本地服务器
docsify serve docs
# 推荐
npm install
# 运行 Docusaurus serve 启动一个本地服务器
npm start
```
可以方便地实时预览效果。默认访问地址 [http://localhost:3000](http://localhost:3000/)
......
---
sidebar_position: 1
id: how_contribute
title: 如何贡献
---
## 如何贡献
首先非常感谢大家选择和使用 Dinky & Apache Flink,真诚地欢迎大家加入 Dinky 社区与 Apache Flink 中文社区,融入开源世界,打造新一代实时计算框架与平台,共建共赢!
......@@ -26,13 +34,13 @@
## 参与文档贡献
请查阅 [文档贡献](/zh-CN/developer_guide/document.md)
请查阅 [文档贡献](./document)
## 参与代码贡献
IDEA 调试请查阅 [本地调试](/zh-CN/developer_guide/local_debug.md)[远程调试](/zh-CN/developer_guide/remote_debug.md)
IDEA 调试请查阅 [本地调试](../local_debug)[远程调试](../remote_debug)
贡献请查阅 [Issue 需知](/zh-CN/developer_guide/issue.md)[Pull Request 需知](/zh-CN/developer_guide/pull_request.md)[Commit Message 需知](/zh-CN/developer_guide/commit_message.md)
贡献请查阅 [Issue 需知](./issue)[Pull Request 需知](./pull_request)[Commit Message 需知](./commit_message)
## 如何领取 Issue,提交 Pull Request
......@@ -40,9 +48,11 @@ IDEA 调试请查阅 [本地调试](/zh-CN/developer_guide/local_debug.md) 及 [
- 所有的 Bug 与新 Feature 建议使用 Issues Page 进行管理。
- 如果想要开发实现某个 Feature 功能,请先回复该功能所关联的 Issue,表明你当前正在这个 Issue 上工作。 并在回复的时候为自己设置一个最后期限,并添加到回复内容中。
- 你应该新建一个分支来开始你的工作,分支的名字参考 [Pull Request 需知](/zh-CN/developer_guide/pull_request.md)。比如,你想完成 feature 功能并提交了 Issue demo,那么你的 branch 名字应为 feature-demo。 功能名称可与导师讨论后确定。
- 完成后,发送一个 Pull Request 到 Dinky 的 dev 分支,提交过程具体请参考下面《[提交代码须知](/zh-CN/developer_guide/commit_code.md)》。
- 你应该新建一个分支来开始你的工作,分支的名字参考 [Pull Request 需知](./pull_request)。比如,你想完成 feature 功能并提交了 Issue demo,那么你的 branch 名字应为 feature-demo。 功能名称可与导师讨论后确定。
- 完成后,发送一个 Pull Request 到 Dinky 的 dev 分支,提交过程具体请参考下面《[提交代码须知](./commit_code)》。
如果是想提交 Pull Request 完成某一个 Feature 或者修复某个 Bug,这里都建议大家从小处做起,完成一个小功能就提交一次,每次别改动太多文件,改动文件太多也会给 Reviewer 造成很大的心理压力,建议通过多次 Pull Request 的方式完成。
注意:本文档参考了《 [DolphinScheduler Contribute](https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html) 》,非常感谢 DolphinScheduler 社区的支持。
:::info 信息
本文档参考了《 [DolphinScheduler Contribute](https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html) 》,非常感谢 DolphinScheduler 社区的支持。
:::
\ No newline at end of file
---
sidebar_position: 3
id: issue
title: Issue 须知
---
Issues 功能被用来追踪各种特性,Bug,功能等。项目维护者可以通过 Issues 来组织需要完成的任务。
Issue 是引出一个 Feature 或 Bug 等的重要步骤,在单个 Issue 中可以讨论的内容包括但不限于 Feature 的包含的功能,存在的 Bug 产生原因,前期方案的调研,以及其对应的实现设计和代码思路。
......@@ -12,127 +17,36 @@ Issue 是引出一个 Feature 或 Bug 等的重要步骤,在单个 Issue 中
其中`Issue 类型`如下:
<table>
<thead>
<tr>
<th style="width: 10%; text-align: center;">Issue 类型</th>
<th style="width: 20%; text-align: center;">描述</th>
<th style="width: 20%; text-align: center;">样例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">Feature</td>
<td style="text-align: center;">包含所期望的新功能和新特性</td>
<td style="text-align: center;">[Feature][admin] Add xxx admin in xxx controller</td>
</tr>
<tr>
<td style="text-align: center;">Bug</td>
<td style="text-align: center;">程序中存在的 Bug</td>
<td style="text-align: center;">[Bug][admin] Throw exception when xxx</td>
</tr>
<tr>
<td style="text-align: center;">Improvement</td>
<td style="text-align: center;">针对目前程序的一些改进,不限于代码格式,程序性能等</td>
<td style="text-align: center;">[Improvement][executor] Improve xxx on executor</td>
</tr>
<tr>
<td style="text-align: center;">Test</td>
<td style="text-align: center;">专门针对测试用例部分</td>
<td style="text-align: center;">[Test][metadata-mysql] Add xxx metadata-mysql test</td>
</tr>
<tr>
<td style="text-align: center;">Sub-Task</td>
<td style="text-align: center;">一般都是属于 Feature 类的子任务,针对大 Feature,可以将其分成很多个小的子任务来一一完成</td>
<td style="text-align: center;">[Sub-Task][executor] Implement xxx in xxx</td>
</tr>
</tbody>
</table>
| Issue 类型 | 描述 | 样例 |
| ------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------- |
| Feature | 包含所期望的`新功能``新特性 ` | [Feature][admin] Add xxx admin in xxx controller |
| Bug | 程序中存在的`Bug` | [Bug][admin] Throw exception when xxx |
| Improvement | 针对目前程序的一些`改进`,不限于`代码格式``程序性能`等 | [Improvement][executor] Improve xxx on executor |
| Test | 专门针对`测试用例`部分 | [Test][metadata-mysql] Add xxx metadata-mysql test |
| Sub-Task | 一般都是属于`Feature` 类的子任务,针对大 Feature,可以将其分成很多个小的子任务来一一完成 | [Sub-Task][executor] Implement xxx in xxx |
其中`模块名`如下:
<table>
<thead>
<tr>
<th style="width: 10%; text-align: center;">模块名</th>
<th style="width: 20%; text-align: center;">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">admin</td>
<td style="text-align: center;">管理模块</td>
</tr>
<tr>
<td style="text-align: center;">alert</td>
<td style="text-align: center;">报警模块</td>
</tr>
<tr>
<td style="text-align: center;">app</td>
<td style="text-align: center;">Flink APP 模块</td>
</tr>
<tr>
<td style="text-align: center;">assembly</td>
<td style="text-align: center;">打包模块</td>
</tr>
<tr>
<td style="text-align: center;">client</td>
<td style="text-align: center;">Flink Client 模块</td>
</tr>
<tr>
<td style="text-align: center;">common</td>
<td style="text-align: center;">基础模块</td>
</tr>
<tr>
<td style="text-align: center;">connectors</td>
<td style="text-align: center;">Flink Connector 模块</td>
</tr>
<tr>
<td style="text-align: center;">core</td>
<td style="text-align: center;">核心模块</td>
</tr>
<tr>
<td style="text-align: center;">daemon</td>
<td style="text-align: center;">守护线程模块</td>
</tr>
<tr>
<td style="text-align: center;">doc</td>
<td style="text-align: center;">资源模块</td>
</tr>
<tr>
<td style="text-align: center;">docs</td>
<td style="text-align: center;">官网文档</td>
</tr>
<tr>
<td style="text-align: center;">executor</td>
<td style="text-align: center;">执行器模块</td>
</tr>
<tr>
<td style="text-align: center;">extends</td>
<td style="text-align: center;">扩展模块</td>
</tr>
<tr>
<td style="text-align: center;">function</td>
<td style="text-align: center;">Flink UDF 模块</td>
</tr>
<tr>
<td style="text-align: center;">gateway</td>
<td style="text-align: center;">提交网关模块</td>
</tr>
<tr>
<td style="text-align: center;">metadata</td>
<td style="text-align: center;">元数据模块</td>
</tr>
<tr>
<td style="text-align: center;">web</td>
<td style="text-align: center;">Web 模块</td>
</tr>
</tbody>
</table>
| 模块名 | 描述 |
| ------------ | ---------------------- |
| admin | 管理模块 |
| alert | 报警模块 |
| app | Flink APP 模块 |
| assembly | 打包模块 |
| client | Flink Client 模块 |
| common | 基础模块 |
| connectors | Flink Connector 模块 |
| core | 核心模块 |
| doc | 资源模块 |
| docs | 官网文档 |
| executor | 执行器模块 |
| extends | 扩展模块 |
| function | Flink UDF 模块 |
| gateway | 提交网关模块 |
| metadata | 元数据模块 |
| web | Web 模块 |
### Issue 内容模板
......@@ -223,7 +137,6 @@ Priority分为四级: Critical、Major、Minor、Trivial
```
### Contributor
除一些特殊情况之外,在开始完成 Issue 之前,建议先在 Issue 下或者邮件列表中和大家讨论确定设计方案或者提供设计方案,以及代码实现思路。
......@@ -235,4 +148,4 @@ Pull Request review 阶段针对实现思路的意见不同或需要重构而导
- 当出现提出 Issue 的用户不清楚该 Issue 对应的模块时的处理方式。
确实存在大多数提出 Issue 用户不清楚这个 Issue 是属于哪个模块的,其实这在很多开源社区都是很常见的。在这种情况下,其实 committer/contributor 是知道这个 Issue 影响的模块的,如果之后这个 Issue 被 committer 和 contributor approve 确实有价值,那么 committer 就可以按照 Issue 涉及到的具体的模块去修改 Issue 标题,或者留言给提出 Issue 的用户去修改成对应的标题。
\ No newline at end of file
确实存在大多数提出 Issue 用户不清楚这个 Issue 是属于哪个模块的,其实这在很多开源社区都是很常见的。在这种情况下,其实 committer/contributor 是知道这个 Issue 影响的模块的,如果之后这个 Issue 被 committer 和 contributor approve 确实有价值,那么 committer 就可以按照 Issue 涉及到的具体的模块去修改 Issue 标题,或者留言给提出 Issue 的用户去修改成对应的标题。
---
sidebar_position: 4
id: pull_request
title: Pull Request 须知
---
Pull Request 本质上是一种软件的合作方式,是将涉及不同功能的代码,纳入主干的一种流程。这个过程中,可以进行讨论、审核和修改代码。
在 Pull Request 中尽量不讨论代码的实现方案,代码及其逻辑的大体实现方案应该尽量在 Issue 或者邮件列表中被讨论确定,在 Pull Request 中我们尽量只关注代码的格式以及代码规范等信息,从而避免实现方式的意见不同而导致 waste time。
......@@ -8,44 +13,15 @@ Pull Request 本质上是一种软件的合作方式,是将涉及不同功能
其中`Pull Request 类型``Issue 类型`的对应关系如下:
<table>
<thead>
<tr>
<th style="width: 10%; text-align: center;">Issue 类型</th>
<th style="width: 20%; text-align: center;">Pull Request 类型</th>
<th style="width: 20%; text-align: center;">样例(假设 Issue 号为 3333)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">Feature</td>
<td style="text-align: center;">Feature</td>
<td style="text-align: center;">[Feature-3333][admin] Implement xxx</td>
</tr>
<tr>
<td style="text-align: center;">Bug</td>
<td style="text-align: center;">Fix</td>
<td style="text-align: center;">[Fix-3333][admin] Fix xxx</td>
</tr>
<tr>
<td style="text-align: center;">Improvement</td>
<td style="text-align: center;">Improvement</td>
<td style="text-align: center;">[Improvement-3333][alert] Improve the performance of xxx</td>
</tr>
<tr>
<td style="text-align: center;">Test</td>
<td style="text-align: center;">Test</td>
<td style="text-align: center;">[Test-3333][metadata-mysql] Add the e2e test of xxx</td>
</tr>
<tr>
<td style="text-align: center;">Sub-Task</td>
<td style="text-align: center;">Sub-Task 对应的父类型</td>
<td style="text-align: center;">[Feature-3333][admin] Implement xxx</td>
</tr>
</tbody>
</table>
| Issue 类型 | 描述 | 样例 |
| ------------- | ----------------------- | ---------------------------------------------------------- |
| Issue 类型 | Pull Request 类型 | 样例(假设 Issue 号为 3333) |
| Feature | Feature | [Feature-3333][admin] Implement xxx |
| Bug | Fix | [Fix-3333][admin] Fix xxx |
| Improvement | Improvement | [Improvement-3333][alert] Improve the performance of xxx |
| Test | Test | [Test-3333][metadata-mysql] Add the e2e test of xxx |
| Sub-Task | Sub-Task 对应的父类型 | [Feature-3333][admin] Implement xxx |
其中 `Issue 号`是指当前 Pull Request 对应要解决的 Issue 号,`模块名`同 Issue 的模块名。
......@@ -69,16 +45,12 @@ Pull Request 本质上是一种软件的合作方式,是将涉及不同功能
<img src="/img/checkstyle-idea.png" alt="checkstyle idea configuration" />
</p>
截止目前,Checkstyle 插件已经配置完成了,当有代码或者文件不符合风格时就会显示在 Checkstyle 中。但强烈建议同时配置 Intellij IDEA 的代码风格,完成配置后可以使用 Intellij IDEA 自动格式化功能。你可以在路径`Preferences -> Editor -> Code Style -> Java`找到配置,请参照下图完成其配置
<p align="center">
<img src="/img/code-style-idea.png" alt="code style idea configuration" />
</p>
1. 在提交 pull request 前格式化你的代码:完成上面全部后,你可以使用快捷键`Command + L`(Mac用户) or `Ctrl+L`(Windows用户)在 Intellij IDEA 完成自动格式化。格式化代码的最佳时间是将你的修改提交到本地 git 版本库之前
### 相关问题
......@@ -91,4 +63,4 @@ Pull Request 本质上是一种软件的合作方式,是将涉及不同功能
Issue 的类型都标记为 Sub-Task,然后将这些 Sub-Task 类型的 Issue 关联到一个总 Issue 上,在提交
Pull Request 时,每个 Pull Request 都只关联一个 Sub-Task 的 Issue。
尽量把一个 Pull Request 作为最小粒度。如果一个 Pull Request 只做一件事,Contributor 容易完成,Pull Request 影响的范围也会更加清晰,对 reviewer 的压力也会小。
\ No newline at end of file
尽量把一个 Pull Request 作为最小粒度。如果一个 Pull Request 只做一件事,Contributor 容易完成,Pull Request 影响的范围也会更加清晰,对 reviewer 的压力也会小。
---
sidebar_position: 2
id: local_debug
title: 本地调试
---
# 前言
最近小伙伴们一直追问,如何在 IDEA 里去调试 Dlink。本文将指导大家可以成功地搭建调试环境并可以修改相关功能的代码,当然欢迎大家将相关问题修复及新功能的实现贡献到 dev 分支哦。那一起来看看吧!
# 开发者本地调试手册
## 前置条件
......@@ -24,7 +37,7 @@
### 代码克隆
请通过git 管理工具从 GitHub 中拉取 Dinky 源码
请通过 git 管理工具从 GitHub 中拉取 Dinky 源码
```
mkdir workspace
......@@ -38,7 +51,7 @@ git clone git://github.com/DataLinkDC/dlink.git
该指南介绍了关于如何设置 IntelliJ IDEA 来进行 Dlink 前后端开发。Eclipse 不建议使用。
以下文档描述了 IntelliJ IDEA 2021.3 (https://www.jetbrains.com/idea/download/) 的设置步骤以及 Dlink 的导入步骤。
以下文档描述了 [IntelliJ IDEA 2021.3](https://www.jetbrains.com/idea/download/) 的设置步骤以及 Dlink 的导入步骤。
所以以下简称 IDEA 来表示 IntelliJ IDEA 。
......@@ -59,13 +72,14 @@ IDEA 提供了插件设置来安装 Lombok 插件。如果尚未安装,请在
## 前端环境
### 安装 node.js
可用版本 14.17.0,安装步骤详情百度。
可用版本 14.17.0 +,安装步骤详情百度。
### 安装 npm
node.js安装后npm版本较高,因此需要可用版本 7.19.0,升级npm命令如下:
node.js 安装后 npm 版本较高,因此需要可用版本 7.19.0,升级npm命令如下:
```
npm install npm@7.19.0 -g
......@@ -101,10 +115,10 @@ npm build
## 开发者须知
Dinky开发环境配置有两种模式,分别是product环境和compile环境
Dinky开发环境配置有两种模式,分别是 provided 环境和 compile 环境
- product:此环境适合已经存在安装包,可进行远程调试,此模式需要外部环境安装Flink;
- compile:此环境适合二次开发或者熟悉源码,此模式不需要额外安装Flink,通过Flink自带的local模式便可调试开发
- provided:此环境适合已经存在安装包,可进行远程调试,此模式需要外部环境安装Flink;
- compile:此环境适合二次开发或者熟悉源码,此模式不需要额外安装Flink,通过Flink自带的local模式可调试开发
## Dinky本地开发环境
......@@ -112,7 +126,7 @@ Dinky开发环境配置有两种模式,分别是product环境和compile环境
开发不同的代码需要不同的分支
- 如果要基于二进制包进行开发,需要切换到对应的分支代码,如0.5.1;
- 如果要基于二进制包进行开发,需要切换到对应的分支代码,如 0.5.1;
- 如果想要开发新代码,切换到dev分支即可;
下面说明在启动前如何修改相应的代码,为本地启动做准备。修改
......@@ -159,29 +173,36 @@ spring:
启动 dlink-admin 下的 Dlink 启动类,可见 8888 端口。
稍微等待一会,即可访问 127.0.0.1:8888 可见登录页。
登录用户/密码: admin/admin
**说明:** 在dinky 0.6版本后,不需要额外启动前端,启动后端后便可访问 127.0.0.1:8888
### 启动前端服务
如你需要对前端做修改 请参考以下:
```bash
npm start
```
等待几分钟,访问 127.0.0.1:8888 可见登录页。
稍微等待一会,即可访问 127.0.0.1:8000 可见登录页。
输入 admin/admin 登录。
登录用户/密码: admin/admin
**说明:** 在dinky 0.6版本后,不需要额外启动前端,启动后端后便可访问 127.0.0.1:8888
### 本地源码调试示例
在IDEA启动后,等待几分钟,即可看到登录页,如下:
![](http://www.aiwenmo.com/dinky/dev/docs/%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20220306224313.png)
![login](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/local_debug/login.png)
登录进去后,以配置数据源和查询数据源为例,观察IDEA的日志情况和dinky界面是否互通;
![](http://www.aiwenmo.com/dinky/dev/docs/%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20220306224657.png)
![test_database_is_success](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/local_debug/test_database_is_success.png)
![](http://www.aiwenmo.com/dinky/dev/docs/%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20220306224756.png)
![url_log](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/local_debug/url_log.png)
如上,配置的数据源已经成功,IDEA日志也正常,这个时候就可以基于本地做二次开发或者贡献代码了。
......@@ -231,7 +252,7 @@ Dlink 的管理中心,标准的 SpringBoot 应用,负责与前端 react 交
### dlink-alert
Dinky的告警中心,当前已完成钉钉及企业微信
Dinky的告警中心,当前已完成: 钉钉 、企业微信 、飞书 、邮箱
### dlink-app
......@@ -251,7 +272,7 @@ Dlink 的子项目的公用类及实现项目。
### dlink-connectors
Dlink 的 Connectors,目前实现了 Oracle、Clickhouse、SQLServer。此外 Dlink 可以直接使用 Flink 的所有连接器,在确保依赖不冲突的情况下。
Dlink 的 Connectors,目前实现了 Oracle、Clickhouse、SQLServer ...。此外 Dlink 可以直接使用 Flink 的所有连接器,在确保依赖不冲突的情况下。
### dlink-core
......@@ -287,9 +308,6 @@ Dlink 的前端项目,基于 Ant Design Pro 5.0.0。Why Not Vue ? React Who Us
Dlink 的前端架构与开发后续文章会详解,本文略。
### docs
Dlink 的官网实现,大佬们可以修改或贡献 markdown。多多分享,让社区发展更快,十分感谢。
## 任务执行路线
......
---
sidebar_position: 3
id: remote_debug
title: 远程调试
---
# 开发者远程调试手册
远程调试适用与服务器已部署如下三种集群的场景
......@@ -12,7 +19,31 @@
对于开发者来说,如何在 IDEA 中对作业进行远程调试及提交。下面以 Yarn Session 模式为例。
**说明:** 环境准备及源码导入 IDEA,请参考本地调试
:::tip 说明
环境准备及源码导入 IDEA,详见[本地调试](../developer_guide/local_debug)
:::
## 环境
| 名称 | 版本 |
|-------|---------|
| Flink | 1.13.5 |
| Dinky | dev |
| Java | 1.8_291 |
| Node | 14.17.0 |
| npm | 7.9.0 |
| Lombok | IDEA 插件 |
# 下载 Dinky
```bash
git clone https://github.com/DataLinkDC/dlink.git
# 如需本地调试开发 请使用 dev 分支
# 进入到 dlink 源码目录
git checkout dev
```
## 编译
......@@ -27,19 +58,22 @@ mvn clean package -Dmaven.test.skip=true
![install](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/local_package_install.jpg)
图形化编译,需要跳过 test ,并进行 clean ==> install。
**注意:**如果不执行 install 生成的 jar安装不到本地 别的依赖就识别不到本地仓库这些包 所以可能导依赖的时候会报错 CustomTableEnvironmentImpl 这个类未定义 。
**说明:**
**说明:**
​ 1.如果不想单独编译前端,在 dlink-web 模块的 pom 下有``frontend-maven-plugins``,可直接前后端编译;
​ 2.如果要分开编译,在后端编译完成后,需要在 dlink-web 下执行 ``npm i --force ``;
​ 2.如果要分开编译,在后端编译完成后,需要在 dlink-web 下执行 ``npm i --force ``;
:::warning 注意事项
如果不执行 install 生成的 jar安装不到本地 别的依赖就识别不到本地仓库这些包 所以可能导依赖的时候会报错 CustomTableEnvironmentImpl 这个类未定义 。
:::
## 远程调试环境搭建
### 修改pom文件
需要修改 dlink 根目录下的 pom 文件,将 provied 改为 complie,修改如下:
需要修改 dlink 根目录下的 pom.xml 文件,将 **provied** 改为 **complie**,修改如下:
```
<properties>
......@@ -54,7 +88,7 @@ mvn clean package -Dmaven.test.skip=true
### 修改配置文件
修改 dlink 根目录下 /dlink-admin/src/main/resources/application.ym文件
修改 dlink 根目录下 **/dlink-admin/src/main/resources/application.yml** 文件
配置数据库连接信息:
......@@ -72,7 +106,25 @@ spring:
# clean-disabled: true
## baseline-on-migrate: true
# table: dlink_schema_history
# Redis配置
#sa-token如需依赖redis,请打开redis配置和pom.xml、dlink-admin/pom.xml中依赖
# redis:
# host: localhost
# port: 6379
# password:
# database: 10
# jedis:
# pool:
# # 连接池最大连接数(使用负值表示没有限制)
# max-active: 50
# # 连接池最大阻塞等待时间(使用负值表示没有限制)
# max-wait: 3000
# # 连接池中的最大空闲连接数
# max-idle: 20
# # 连接池中的最小空闲连接数
# min-idle: 5
# # 连接超时时间(毫秒)
# timeout: 5000
server:
port: 8888
......@@ -84,9 +136,9 @@ mybatis-plus:
db-config:
id-type: auto
configuration:
##### mybatis-plus打印完整sql(只适用于开发环境)
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
##### mybatis-plus打印完整sql(只适用于开发环境) # 此处如果想查看具体执行的SQL 本地调试的时候也可以打开 方便排错
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
# Sa-Token 配置
sa-token:
......@@ -108,7 +160,7 @@ sa-token:
### 初始化数据库
在 MySQL 数据库创建 dlink 用户并在 dlink 数据库中执行 dlink-doc/sql/dlink.sql 文件。此外 dlink-doc/sql/dlink_history.sql 标识了各版本的升级 sql。
在 MySQL 数据库创建 dlink 用户并在 dlink 数据库中执行 **dlink-doc/sql/dlink.sql** 文件。此外 **dlink-doc/sql/dlink_history.sql** 标识了各版本的升级 sql。
以上文件修改完成后,就可以启动 Dinky。
......@@ -117,17 +169,25 @@ sa-token:
- **hadoop配置文件:** core-site.xml hdfs-site.xml yarn-site.xml hive-site.xml;
- **Flink配置文件:** flink-conf.yaml;
**注意:** hive-site.xml 需要使用到 Hive Catalog 时添加;
:::warning 注意事项
hive-site.xml 需要使用到 Hive Catalog 时添加
:::
### 添加plugins 插件依赖
### 添加 plugins 插件依赖
根据 job 的场景自行选择插件依赖 jar, 选择需要的 jars , 注意需要将该目录添加为全局库,如下所示:
根据 job 的场景自行选择插件依赖 jar, 选择需要的 jars , 右键添加为库,如下所示:
![lib](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/jars_add_to_repo.jpg)
- 选中 jars 添加为库
![jars_add_to_repo](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/jars_add_to_repo.jpg)
![choose_addrepo_global](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/choose_addrepo_global.jpg)
- 弹框中选择信息如图:
- 名称: 自定义
- 级别: 项目库
- 添加到模块: dlink-admin
![choose_addrepo_global](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/choose_addrepo_global.png)
![create_repo](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/create_repo.png)
### 启动 Yarn Session 集群
......@@ -138,19 +198,26 @@ yarn-session.sh -n 2 -jm 1024 -tm 4096 -s 6 -d
### 启动 Dinky 服务
启动 dlink-admin 下的 Dlink 启动类,可见 8888 端口。
#### 方式一
- 直接启动 dlink-admin 下的 Dlink 启动类,可见 8888 端口。
- **访问:** 127.0.0.1:8888
- **账户密码:** admin/admin
等待几分钟,访问 127.0.0.1:8888 可见登录页。
#### 方式二
输入 admin/admin 登录。
- 启动 dlink-admin 下的 Dlink 启动类
- 进入到 **dlink-web** 执行 **npm start**
- **访问:** 127.0.0.1:8000
- **账户密码:** admin/admin
**说明:** 在 Dinky-0.6 版本后,不需要额外启动前端,启动后端后便可访问 `127.0.0.1:8888`
在 Dinky-0.6 版本后,不需要额外启动前端,如需进行前后端联调,详见[方式二](./remote_debug#方式二)
## 远程调试作业示例
以上远程调试环境搭建完成后,就如同在服务器部署上类似,可以对作业远程提交到Flink集群。下面以Flink CDC ==》Hudi做为远程调试的作业
以上远程调试环境搭建完成后,就如同在服务器部署上类似,可以对作业远程提交到 Flink 集群。下面以 Flink CDC ==》 Hudi 做为远程调试的作业
### 脚本准备
......@@ -294,8 +361,9 @@ insert into sink_order_mysql_goods_order_pay select * from source_order_my
**运维中心查看 JOB 详情**
![job_davops_center](http://www.aiwenmo.com/dinky/docs/zh-CN/developer_guide/remote_debug/devops_job_detail.png)
**注意事项:** 如果拉取了新代码,远程调试环境一定要检查一遍,以防各种报错。
:::warning 注意事项
如果拉取了新代码,远程调试环境一定要检查一遍,以防各种报错。
:::
......
{
"label": "扩展",
"position": 13
}
{
"label": "功能扩展",
"position": 2
}
Dinky 告警机制 遵循 SPI,可随意扩展所需要的告警机制。如需扩展可在 dlink-alert 模块中进行可插拔式扩展。现已经支持的告警机制包括如下:
---
sidebar_position: 4
id: alert
title: 扩展报警插件
---
Dinky 告警机制遵循 SPI,可随意扩展所需要的告警机制。如需扩展可在 dlink-alert 模块中进行可插拔式扩展。现已经支持的告警机制包括如下:
- DingDingTalk
- 企业微信: 同时支持**APP****WeChat 群聊** 方式
......@@ -9,7 +18,7 @@ Dinky 学习了 ``Apache Dolphinscheduler`` 的插件扩展机制,可以在 Di
## 准备工作
- 本地开发环境搭建
- 参考 [开发者本地调试手册](/zh-CN/developer_guide/local_debug.md)
- 详见 [开发者本地调试手册](../../developer_guide/local_debug)
## 后端开发
- 在 dlink-alert 新建子模块 , 命名规则为 `dlink-alert-{报警类型}` 在子模块中实现 `dlink-alert-{报警类型}` 的报警机制
......@@ -59,48 +68,49 @@ Dinky 学习了 ``Apache Dolphinscheduler`` 的插件扩展机制,可以在 Di
## 前端开发
- **dlink-web** 为 Dinky 的前端模块
- 扩展告警插件相关表单所在路径: `dlink-web/src/pages/AlertInstance`
- 修改 `dlink-web/src/pages/AlertInstance/conf.ts` 的 **ALERT_TYPE** 中 :
- **ALERT_TYPE** 添加如下 eg:
-
- 修改 `dlink-web/src/pages/AlertInstance/conf.ts`
**ALERT_TYPE** 添加如下 eg:
```
EMAIL:'Email',
```
- **ALERT_CONFIG_LIST** 添加如下 eg:
**ALERT_CONFIG_LIST** 添加如下 eg:
```
{
type: ALERT_TYPE.EMAIL,
}
```
- 注意: 此处属性值需要与后端 `static final String TYPE = "Email";`变量值保持一致
**注意:** 此处属性值需要与后端 `static final String TYPE = "Email";`变量值保持一致
如下图:
![](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/alert/extend_alert_conf.png)
![extend_alert_conf](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/function_expansion/alert/extend_alert_conf.png)
- 修改 `dlink-web/src/pages/AlertInstance/icon.tsx` 的 **getAlertIcon** 中 添加如下:
eg:
修改 `dlink-web/src/pages/AlertInstance/icon.tsx` 的 **getAlertIcon** 中
添加如下 eg:
```
case ALERT_TYPE.EMAIL:
return (<Icon component={EmailSvg}/>);
```
同时在下方定义 SVG : `如不定义将使用默认 SVG`
- svg 获取: [https://www.iconfont.cn](https://www.iconfont.cn)
同时在下方定义 SVG : `如不定义将使用默认 SVG`
svg 获取: [https://www.iconfont.cn](https://www.iconfont.cn)
```
export const DingTalkSvg = () => (
export const EmailSvg = () => (
{svg 相关代码}
);
```
**注意:** svg 相关代码中需要将 **width** **height** 统一更换为 **width={svgSize} height={svgSize}**
如下图:
![](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/alert/extened_alert_icon.png)
![extened_alert_icon](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/function_expansion/alert/extened_alert_icon.png)
- 修改 `dlink-web/src/pages/AlertInstance/components/AlertInstanceChooseForm.tsx` 追加如下:
eg: 其中需要修改的地方为
- 1. `EMAIL` 替换为上述 **dlink-web/src/pages/AlertInstance/conf.ts** 中 **ALERT_TYPE** 的新增类型
- 2. `EmailForm` 为新建告警表单文件 **dlink-web/src/pages/AlertInstance/components/EmailForm.tsx** 中的 **EmailForm** .
- 修改 `dlink-web/src/pages/AlertInstance/components/AlertInstanceChooseForm.tsx`
追加如下 eg:
```
{(values?.type == ALERT_TYPE.EMAIL || alertType == ALERT_TYPE.EMAIL)?
<EmailForm
......@@ -119,15 +129,21 @@ export const DingTalkSvg = () => (
/>:undefined
}
```
其中需要修改的地方为
- `EMAIL` 替换为上述 **dlink-web/src/pages/AlertInstance/conf.ts** 中 **ALERT_TYPE** 的新增类型
- `EmailForm` 为新建告警表单文件 **dlink-web/src/pages/AlertInstance/components/EmailForm.tsx** 中的 **EmailForm** .
如下图:
![](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/alert/extened_alert_choose_form.png)
![extened_alert_choose_form](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/function_expansion/alert/extened_alert_choose_form.png)
- 需要新建表单文件 , 命名规则: ``{告警类型}Form``
- 该文件中除 **表单属性** 外 , 其余可参照其他类型告警 , 建议复制其他类型告警的表单 , 修改其中的表单属性即可
- 注意:
- 部分表单属性保存为 Json 格式
- 需要修改 如下的表单配置
```text
```shell
找到如下相关代码:
const [formVals, setFormVals] = useState<Partial<AlertInstanceTableListItem>>({
id: props.values?.id,
......@@ -140,7 +156,7 @@ export const DingTalkSvg = () => (
```
----
至此 , 基于 Dinky 扩展告警完成 , 如您也有扩展需求 ,请参照 [如何 Issuse](/zh-CN/developer_guide/issue.md) [如何提交 PR](/zh-CN/developer_guide/pull_request.md)
----
:::tip 说明
至此 , 基于 Dinky 扩展告警完成 , 如您也有扩展需求 ,请参照如何 [[Issuse]](../../developer_guide/contribution/issue) 和如何[[提交 PR]](../../developer_guide/contribution/pull_request)
:::
\ No newline at end of file
---
sidebar_position: 5
id: completion
title: FlinkSQL 编辑器自动补全函数
---
## FlinkSQL 编辑器自动补全函数
Dlink-0.3.2 版本上线了一个非常实用的功能——自动补全。
......
---
sidebar_position: 2
id: connector
title: 扩展连接器
---
## 扩展 Connector
将 Flink 集群上已扩展好的 Connector 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 Connector 过程同 Flink 官方一样。
This diff is collapsed.
---
sidebar_position: 1
id: flinkversion
title: 扩展 Flink 版本
---
## 扩展其他版本的 Flink
Flink 的版本取决于 lib 下的 dlink-client-1.13.jar。当前版本默认为 Flink 1.13.3 API。向其他版本的集群提交任务可能存在问题,已实现 1.11、1.12、1.13, 1.14,切换版本时只需要将对应依赖在lib下进行替换,然后重启即可。
Flink 的版本取决于 lib 下的 dlink-client-1.13.jar。当前版本默认为 Flink 1.13.6 API。向其他版本的集群提交任务可能存在问题,已实现 1.11、1.12、1.13、 1.14、1.15,切换版本时只需要将对应依赖在lib下进行替换,然后重启即可。
切换版本时需要同时更新 plugins 下的 Flink 依赖。
\ No newline at end of file
---
sidebar_position: 1
id: integrate
title: 集成
---
**声明:** Dinky并没有维护下面列出的库,其中有一部分是生产实践,一部分还未做过相关生产实践。欢迎使用Dinky已经集成的第三方库。
## 关系型数据库
......@@ -42,7 +50,7 @@
- Iceberg
[Hudi](https://github.com/apache/hudi)[Iceberg](https://github.com/apache/iceberg)请移步到github自行编译或者下载
[Hudi](https://github.com/apache/hudi)[Iceberg](https://github.com/apache/iceberg) 请移步到github自行编译或者下载
## HADOOP
- [flink-shaded-hadoop-3-uber](https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/flink/flink-shaded-hadoop-3-uber)
......
{
"label": "实践指南",
"position": 3
}
---
sidebar_position: 3
id: aggtable
title: AGGTABLE 表值聚合的实践
---
## 摘要
本文讲述了 Dlink 对 Flink 的表值聚合功能的应用与增强。增强主要在于定义了 AGGTABLE 来通过 FlinkSql 进行表值聚合的实现,以下将通过两个示例 top2 与 to_map 进行讲解。
......@@ -192,7 +200,7 @@ AGG BY TOP2(value) as (value,rank);
### 进入Dlink
![image-20210615115042539](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGIAFicLZ3bwSawOianJQnNWuKAvZJ3Bb00DiaBxtxvnXgToGibPAwMFhs6A/0?wx_fmt=png)
![login_dinky](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/login_dinky.png)
​ 只有版本号大于等于 0.2.2-rc1 的 Dlink 才支持本文 AGGTABLE 的使用。
......@@ -242,17 +250,17 @@ b.cls,b.score,b.`rank`
from aggscore b
```
​ 本 Sql 使用了 Dlink 的增强特性 Fragment 机制,对 jdbc的配置进行了定义。
​ 本 Sql 使用了 Dinky 的增强特性 Fragment 机制,对 jdbc 的配置进行了定义。
### 维护 FlinkSQL 及配置
![image-20210615115521967](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGeibmfcst4hHVTqzFmX6LvBXqgPTFcCOWHuIxEcbNHgfnUc0mhPm1eFw/0?wx_fmt=png)
![maintain_flinksql_config](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/maintain_flinksql_config.png)
​ 编写 FlinkSQL ,配置开启 Fragment 机制,设置 Flink 集群为本地执行。点击保存。
### 同步执行INSERT
![image-20210615115714713](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGApFiacyxkKERLE9FhsteTeTovcjTQHiaPKcxY6YqSukkVYZWVFGxPJibQ/0?wx_fmt=png)
![sync_run_insert](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/sync_run_insert.png)
​ 点击同步执行按钮运行当前编辑器中的 FlinkSQL 语句集。弹出提示信息,等待执行完成后自动关闭并刷新信息和结果。
......@@ -260,25 +268,26 @@ from aggscore b
### 执行反馈
![image-20210615115913647](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGL7Wv8Tefsn0h1USWf2VLXB2Tb3yx4K2QksiaFplehnrvz25cE0nQnlA/0?wx_fmt=png)
![run_feedback](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/run_feedback.png)
​ 本地执行成功,“0_admin” 为本地会话,里面存储了 Catalog。
### 同步执行SELECT查看中间过程
![image-20210615120129426](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGXkEXFib5ic21kOemq6ib8kWAdLCBicicjBxU9oibmaSs4Hru8EccxKe5z0dg/0?wx_fmt=png)
![sync_select_show_middle](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/sync_select_show_middle.png)
​ 由于当前会话中已经存储了表的定义,此时直接选中 select 语句点击同步执行可以重新计算并展示其计算过程中产生的结果,由于 Flink 表值聚合操作机制,该结果非最终结果。
### 同步执行SELECT查看最终结果
![image-20210615121542233](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkG5mNQFZp4YIuwIrh6cJteFIwsbomibSk32hWbFqlt887F9lee9NYT8fQ/0?wx_fmt=png)
![sync_select_show_final](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/sync_select_show_final.png)
​ 在草稿的页面使用相同的会话可以共享 Catalog,此时只需要执行 select 查询 sink 表就可以预览最终的统计结果。
### 查看Mysql表的数据
![image-20210615120738413](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGerEdvQLXGNqfm7KZT7ARaNBV0mlrUdah69JAB3miaBFBgUU3iaaowcLg/0?wx_fmt=png)
![show_mysql_data](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/show_mysql_data.png)
......@@ -346,19 +355,19 @@ left join aggscore2 b on a.sid=b.sid
### 同步执行
![image-20210615131731449](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGxHX5T3C2vr2CF9LicZicBnGZOYmpXVq343zYFPjXsae0icQ1mTVWcsugQ/0?wx_fmt=png)
![sync_run](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/sync_run.png)
​ 与示例一相似,不同点在于需要更改集群配置为 远程集群。远程集群的注册在集群中心注册,Hosts 需要填写 JobManager 的地址,HA模式则使用英文逗号分割可能出现的地址,如“127.0.0.1:8081,127.0.0.2:8081,127.0.0.3:8081”。心跳监测正常的集群实例即可用于任务执行或提交。
### Flink UI
![image-20210615131931183](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGCSGp5fSGaRz0PgvFlEmWSRdiaZZHbmicvYWXnLzoNL3HWEc3mL1W2jPA/0?wx_fmt=png)
![flink_webui](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/flink_webui.png)
​ 打开集群的 Flink UI 可以发现刚刚提交的批任务,此时可以发现集群版本号为 1.12.2 ,而 Dlink 默认版本为 1.12.4 ,所以一般大版本内可以互相兼容。
### 查看Mysql表的数据
![image-20210615132004925](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGc9NX5IzQ6Kog5oYPiaaELmCYzh3vpdUaK40hNuFPrlAWY1jlZd7QbtQ/0?wx_fmt=png)
![show_mysql_data_again](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/aggtable/show_mysql_data_again.png)
​ 查看 Mysql 表的最终数据,发现存在四条结果,且也符合问题的要求。
---
sidebar_position: 5
id: cdc_kafka_multi_source_merge
title: Flink CDC 和 Kafka 多源合并
---
# Flink CDC 和 Kafka 进行多源合并和下游同步更新
......@@ -47,10 +56,10 @@ ConnectRecord{topic='mysql_binlog_source.gmall.spu_info', kafkaPartition=null, k
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLhNR.png)
![see_debezium_document](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/see_debezium_document.png)
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLfE9.png)
![see_debezium_document_create_table](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/see_debezium_document_create_table.png)
......@@ -62,7 +71,7 @@ ConnectRecord{topic='mysql_binlog_source.gmall.spu_info', kafkaPartition=null, k
再往下翻文档:
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLRHJ.png)
![see_debezium_document_create_table_info](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/see_debezium_document_create_table_info.png)
可以看到,基于 Debezium-json 格式,可以把上面的 schema 定义的 json 格式的元数据给取出来放在字段里。
......@@ -291,7 +300,7 @@ PS:没放 schema{}这个对象,看文档说加了识别会影响效率。
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSL441.png)
![kafka_consumer_info](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/kafka_consumer_info.png)
# Dinky 里面进行建表,提交作业
......@@ -300,8 +309,7 @@ PS:没放 schema{}这个对象,看文档说加了识别会影响效率。
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSL2B4.png)
![dinky_create_kafka_table](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/dinky_create_kafka_table.png)
PS:yarn-session 模式,记得开启预览结果和打印流,不然观察不到数据 changelog
......@@ -311,25 +319,25 @@ PS:yarn-session 模式,记得开启预览结果和打印流,不然观察
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLI9x.png)
![mysql_insert_one_data](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/mysql_insert_one_data.png)
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLo36.png)
![dinky_show_data](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/dinky_show_data.png)
可以看到在指定库和表中新增一条数据,在下游 kafka 作业中实现了同步更新,然后试试对数据库该表的记录进行 delete,效果如下:
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLTgK.png)
![dinky_show_data_again](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/dinky_show_data_again.png)
可以看到"是是是.."这条记录同步删除了。
此时 Flink CDC 的记录是这样:
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSL7jO.png)
![show_cdc_data](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/show_cdc_data.png)
原理主要是 op 去同步下游 kafka 的 changeLog 里的 op
我们浏览一下 changeLog:(Dinky 选中打印流即可)
![image-20210615115042539](https://s4.ax1x.com/2022/01/29/HSLbuD.png)
![print_streaming](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/cdc_kafka_multi_source_merge/print_streaming.png)
可以看到,op 自动识别总线 kafka 发来的 JSON 进行了同步来记录操作。
......
---
sidebar_position: 7
id: clickhouse
title: Clickhouse
---
敬请期待
\ No newline at end of file
---
sidebar_position: 13
id: dataspherestudio
title: DataSphere Studio
---
## 敬请期待
\ No newline at end of file
---
sidebar_position: 12
id: dolphinscheduler
title: Dolphinscheduler
---
## 敬请期待
\ No newline at end of file
---
sidebar_position: 8
id: doris
title: Doris
---
## 背景
Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。
......@@ -156,21 +165,21 @@ left join student b on a.sid = b.sid
## 调试
### 在 Dlink 中提交
### 在 Dinky 中提交
本示例采用了 yarn-session 的方式进行提交。
![image-20211218134246511](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibG3QjNqVbMk7L41wHykKnkV0YxDCVSYj68HlFWylpYckkXicgnTDU7uQ/0?wx_fmt=png)
http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide
![dinky_submit](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/doris/dinky_submit.png)
### FlinkWebUI
![image-20211218134439699](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibn1jXbvKznaF8Tm4AxxvYYDI0fEtXbGm0XUeXhGp44KMlPdoOzjvtHQ/0?wx_fmt=png)
![flink_webui](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/doris/flink_webui.png)
上图可见,流任务已经成功被 Dlink 提交的远程集群了。
上图可见,流任务已经成功被 Dinky 提交的远程集群了。
### Doris 查询
![image-20211218135404787](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9iblKTY6o9fWZxFDQYC19wKVFRGDuUBgNOZxm14sWjyr8tUY7RDeUiaEUw/0?wx_fmt=png)
![doris_query](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/doris/doris_query.png)
上图可见,Doris 已经被写入了历史全量数据。
......@@ -184,7 +193,7 @@ INSERT INTO `score` VALUES (9, 3, 'english', 100);
Doris 成功被追加:
![image-20211218135545742](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibvE4qyQ9ttf2kNZ3raEgabvh442HfiaIfm2l5dhdFmWoGiaHMlvcQmocw/0?wx_fmt=png)
![doris_show_data_change](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/doris/doris_show_data_change.png)
### 变动测试
......@@ -196,5 +205,4 @@ update score set score = 100 where cid = 1
Doris 成功被修改:
![image-20211218135949764](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ib3liaIvXQcCSboO4IoeJhtTRa38ukNogtFzwg31mNEFwRcJ1wGNIhQkQ/0?wx_fmt=png)
![doris_show_data_change_again](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/doris/doris_show_data_change_again.png)
\ No newline at end of file
---
sidebar_position: 4
id: flinkcdc
title: Flink CDC
---
## 扩展 Flink-CDC
`flink-sql-connector-mysql-cdc-2.1.0.jar` 等 CDC 依赖加入到 Dlink 的 `plugins` 下即可。
\ No newline at end of file
---
sidebar_position: 6
id: hive
title: Hive
---
## 前言
最近有很多小伙伴问,Dinky 如何连接 Hive 进行数据开发?
......
---
sidebar_position: 9
id: hudi
title: Hudi
---
## 背景资料
Apache hudi (发音为“ hoodie”)是下一代流式数据湖平台。Apache Hudi 将核心仓库和数据库功能直接引入到数据库中。Hudi 提供表、事务、高效的升级/删除、高级索引、流式摄入服务、数据集群/压缩优化和并发,同时保持数据以开放源码文件格式存储 , Apache Hudi 不仅非常适合流式工作负载,而且它还允许您创建高效的增量批处理管道。
......@@ -55,7 +63,7 @@ mvn clean install -DskipTests -DskipITs -Dcheckstyle.skip=true -Drat.skip=true -
编译完成如下图:
![img](http://www.aiwenmo.com/dinky/hudi/hudill.png)
![hudill](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudill.png)
②. 把相关应的jar包 放到相对应的目录下
......@@ -89,15 +97,15 @@ ps: 注意 还需要将 `hudi-flink-bundle_2.12-0.10.0.jar` 这个包放到 dli
`plugins` 下的包 如下图所示:
![img](http://www.aiwenmo.com/dinky/hudi/dlinkll.png)
![dlinkll](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/dlinkll.png)
c. 访问: [http://ip:port/#/user/login](http://cdh7.vision.com:8811/#/user/login) 默认用户: admin 密码: admin
d. 创建集群实例:
![img](http://www.aiwenmo.com/dinky/hudi/hudi_cluster.png)
![hudi_cluster](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_cluster.png)
![img](http://www.aiwenmo.com/dinky/hudi/hudi_clustertable.png)
![hudi_clustertable](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_clustertable.png)
## 数据表
......@@ -209,35 +217,35 @@ insert into sink_order_mysql_goods_order select * from source_order_mysql_goods_
### 1.对上述SQL执行语法校验:
![img](http://www.aiwenmo.com/dinky/hudi/hudi_explainsql.png)
![hudi_explainsql](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_explainsql.png)
### 2. 获取JobPlan
![img](http://www.aiwenmo.com/dinky/hudi/hudi_jobplan.png)
![hudi_jobplan](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_jobplan.png)
### 3. 执行任务
![img](http://www.aiwenmo.com/dinky/hudi/hudi_executesql.png)
![hudi_executesql](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_executesql.png)
### 4. dlink 查看执行的任务
![img](http://www.aiwenmo.com/dinky/hudi/hudi_process.png)
![hudi_process](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_process.png)
### 5. Flink-webUI 查看 作业
![img](http://www.aiwenmo.com/dinky/hudi/hudi_flink.png)
![hudi_flink](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_flink.png)
### 6. 查看hdfs路径下数据
![img](http://www.aiwenmo.com/dinky/hudi/hudi_hdfs.png)
![hudi_hdfs](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_hdfs.png)
### 7. 查看hive表:
![img](http://www.aiwenmo.com/dinky/hudi/hudi_hive.png)
![hudi_hiveupdate](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_hiveupdate.png)
查看订单号对应的数据
![img](http://www.aiwenmo.com/dinky/hudi/hudi_hivedata.png)
![hudi_hiveupdate](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_hiveupdate.png)
### 8.更新数据操作
......@@ -253,7 +261,7 @@ insert into sink_order_mysql_goods_order select * from source_order_mysql_goods_
再次查看 hive 数据 发现已经更新
![img](http://www.aiwenmo.com/dinky/hudi/hudi_hiveupdate.png)
![hudi_hiveupdate](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_hiveupdate.png)
### 9.删除数据操作
......@@ -265,7 +273,7 @@ insert into sink_order_mysql_goods_order select * from source_order_mysql_goods_
![img](http://www.aiwenmo.com/dinky/hudi/hudi_hivedelete.png)
![hudi_hivedelete](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_hivedelete.png)
### 10.将此数据再次插入
......@@ -277,7 +285,7 @@ INSERT INTO `order`.`goods_order`(`goods_order_id`, `goods_order_uid`, `customer
再次查询hive数据 数据正常进入。
![img](http://www.aiwenmo.com/dinky/hudi/hudi_hiveinsert.png)
![hudi_hiveinsert](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/hudi/hudi_hiveinsert.png)
至此 Dlink在Flink-SQL-CDC 到Hudi Sync Hive 测试结束
......
---
sidebar_position: 10
id: iceberg
title: Iceberg
---
## 敬请期待
\ No newline at end of file
---
sidebar_position: 13
id: kudu
title: kudu
---
# Kudu
> 编辑: roohom
## 说在前面
下面介绍如何通过Dinky整合Kudu,以支持写SQL来实现数据的读取或写入Kudu。
Flink官网介绍了如何去自定义一个支持Source或者Sink的[Connector](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/sourcessinks/),这不是本文探讨的重点,本文侧重于用别人已经写好的Connector去与Dinky做集成以支持读写Kudu。
> 注意:以下内容基于Flink1.13.6 Dinky0.6.2,当然其他版本同理。
## 准备工作
在Kudu上创建一个表,这里为test
![kudu-table](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/kudu-table.png)
我们还需要一个Flink可以使用的针对kudu的Connector,我们找到[**[flink-connector-kudu](https://github.com/collabH/flink-connector-kudu)**]这个项目,clone该项目并在本地适当根据本地所使用组件的版本修改代码进行编译。
1、修改pom
~~~xml
<flink.version>1.13.6</flink.version>
<kudu.version>1.14.0</kudu.version>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
~~~
这里将Flink版本修改为1.13.6, 并且使用1.14.0版本的kudu-client,因为项目作者在README中已经说明了使用1.10.0会存在问题,并且添加了shade方式打包
![kudu-client](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/kudu-client.png)
2、修改`org.colloh.flink.kudu.connector.table.catalog.KuduCatalogFactory`
![catalog-factory](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/catalog-factory.png)
## 构建及使用
1、OK,准备工作完毕,我们将项目编译打包(步骤略),将得到的jar放在flink的lib目录下以及dinky的plugins目录下,如果需要使用yarn-application模式提交任务,还需要将jar放在HDFS上合适位置让flink能访问到。
2、OK,重启Dinky,如果使用yarn-session模式,咱们需要重启得到一个session集群,进入dinky的注册中心配置一个合适的集群实例
![register-session](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/register-session.png)
3、接下来我们去dinky的数据开发界面,写一个读取的SQL demo
~~~sql
CREATE TABLE IF NOT EXISTS kudu_test (
id BIGINT,
name STRING
) WITH (
'connector' = 'kudu',
'kudu.masters' = 'cdh001:7051,cdh002:7051,cdh003:7051',
'kudu.table' = 'impala::xxx.test',
'kudu.hash-columns' = 'id',
'kudu.primary-key-columns' = 'id'
);
SELECT * FROM kudu_test;
~~~
点击运行
![read-test](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/read-test.png)
4、再来一个写入数据的SQL demo
~~~sql
CREATE TABLE IF NOT EXISTS kudu_test (
id BIGINT,
name STRING
) WITH (
'connector' = 'kudu',
'kudu.masters' = 'cdh001:7051,cdh002:7051,cdh003:7051',
'kudu.table' = 'impala::xxx.test',
'kudu.hash-columns' = 'id',
'kudu.primary-key-columns' = 'id'
);
INSERT INTO kudu_test
SELECT 5 AS id , NULLIF('', '') AS name;
~~~
![write-test](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/write-test.png)
成功运行,再去查看kudu表的数据
![write-test-show](http://www.aiwenmo.com/dinky/docs/zh-CN/docs/extend/practice_guide/kudu/write-test-show.png)
集成完毕。
\ No newline at end of file
---
sidebar_position: 2
id: principle
title: Dlink 核心概念及实现原理详解
---
## Dlink 是什么
Dlink 是一个基于 Apache Flink 二次开发的网页版的 FlinkSQL Studio,可以连接多个 Flink 集群实例,并在线开发、执行、提交 FlinkSQL 语句以及预览其运行结果,支持 Flink 官方所有语法并进行了些许增强。
......@@ -8,11 +17,11 @@ Dlink 基于 Flink 源码二次开发,主要应用于 SQL 任务的管理与
### Dlink 的原理
![](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTo5cwuZy7GSLibw5J7Lx6cicx0vXaDHqn5VrrDJ9d3hcEicbEVO77NcP6bOylC9bOpuibM08JJ8bh8XQQ/0?wx_fmt=png)
![dinky_principle](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/principle/dinky_principle.png)
### Dlink 的 FlinkSQL 执行原理
![](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqVImq5JvQzZ7oMqpnQ2NVHdmM6Pfib63atzoWNIqK7Ue6p9KfdibV889sOcZJ1Olw3kLHLmHZiab3Tg/0?wx_fmt=png)
![execution_principle](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/principle/execution_principle.png)
### Connector 的扩展
......
---
sidebar_position: 11
id: udf
title: UDF
---
## 扩展 UDF
将 Flink 集群上已扩展好的 UDF 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 UDF 过程同 Flink 官方一样。
---
sidebar_position: 14
id: faq
title: FAQ
---
1.Flink on Yarn HA高可用,配置hdfs依赖,无法识别HDFS高可用访问地址别名,在Perjob和application模式,提交任务,出现异常信息
![HDFS集群别名](http://www.aiwenmo.com/dinky/dev/docs/HDFS%E9%9B%86%E7%BE%A4%E5%88%AB%E5%90%8D.png)
**解决办法:**
- 方案一
升级 Dinky 至 0.6.2 及后续版本。
详见:[https://github.com/DataLinkDC/dlink/issues/310](https://github.com/DataLinkDC/dlink/issues/310)
- 方案二
添加HADOOP_HOME环境变量,修改 /etc/profile
``` shell
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
```
- 方案三
auto.sh 里加一行
``` shell
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
```
2.出现 commons-cli 异常报错,需要在如下路径放入 commons-cli 依赖
**解决办法:**
下载common-cli包,需要在如下路径放置:
- Flink 的 lib
- dinky 的 plugins
- HDFS 的 /flink/lib/
3.依赖冲突
![dependency_conflict](http://www.aiwenmo.com/dinky/docs/zh-CN/faq/dependency_conflict.png)
**解决办法:**
如果添加 flink-shade-hadoop-uber-3 包后,请手动删除该包内部的javax.servlet 等冲突内容
4.连接hive异常
``` java
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.HttpClient
```
![hive_http_error](http://www.aiwenmo.com/dinky/docs/zh-CN/faq/hive_http_error.png)
**解决办法:**
在plugins下添加以下包
```
httpclient-4.5.3.jar
httpcore-4.4.6.jar
```
5.找不到javax/ws/rs/ext/MessageBodyReader类
![image](https://user-images.githubusercontent.com/40588644/166678799-13450726-6b89-4a04-9911-0ad0b11cf4dd.png)
**解决办法:**
在plugins下添加以下包
- javax.ws.rs-api-2.0.jar
6.在 Flink 中,如果与 CDH 集成并使用 HiveCatalog,必须要从新编译对应 Flink 版本的源码,在使用中如果不编译,会报如下错误:
![cdh_flink_sql_hive_connector_error](http://www.aiwenmo.com/dinky/docs/zh-CN/faq/cdh_flink_sql_hive_connector_error.jpg)
**解决办法:**
1.首先下载 Flink 对应版本源码,并切换到对应 hive 版本flink-sql-connector目录下
2.修改pom,添加如下信息
```java
#添加cloudera 仓库
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<name>Cloudera Repositories</name>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
# 以flink-sql-connector-hive-2.2.0,修改如下
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.1-cdh6.3.2</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.pentaho</groupId>
<artifactId>pentaho-aggdesigner-algorithm</artifactId>
</exclusion>
</exclusions>
</dependency>
```
编译成功后,将对应的jar包拿出来即可,分别放到 flink/lib和dinky/plugins下。重启 Flink 和 Dlinky 即可。
---
sidebar_position: 3
id: feature
title: 功能
---
注意:以下功能均为对应版本已实现的功能,实测可用。
......@@ -11,7 +17,7 @@
| | | 支持 INSERT 语句集 | 0.4.0 |
| | | 新增 SQL 片段语法(全局变量) | 0.4.0 |
| | | 新增 AGGTABLE 表值聚合语法及 UDATF 支持 | 0.4.0 |
| | | 新增 CDCSOURCE 整库实时入仓入湖语法支持 | 0.6.3 |
| | | 新增 CDCSOURCE 多源合并语法支持 | 0.6.0 |
| | | 新增 FlinkSQLEnv 执行环境复用 | 0.5.0 |
| | | 新增 Flink Catalog 交互查询 | 0.4.0 |
| | | 新增 执行环境的共享与私有会话机制 | 0.4.0 |
......@@ -47,7 +53,6 @@
| | | 支持 1.12.0+ | 0.4.0 |
| | | 支持 1.13.0+ | 0.4.0 |
| | | 支持 1.14.0+ | 0.4.0 |
| | | 支持 1.15.0+ | 0.6.2 |
| | SQL | 新增 外部数据源的 SQL 校验 | 0.5.0 |
| | | 新增 外部数据源的 SQL 执行与预览 | 0.5.0 |
| | BI | 新增 折线图的渲染 | 0.5.0 |
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment