diff --git a/.gitignore b/.gitignore index 971e268f88..1d8eefd509 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..fa9d81f9c5 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,151 @@ +## 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] +--- + +输入简短的该博客描述信息 + + # 注意:此处用于主页截断 上述的描述信息 以达到首页的博客列表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 --版本配置文件 + +``` diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index a987e5f5ac..0000000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,14 +0,0 @@ -![logo](_media/dinky.svg) - -# Dinky 0.6 - -> 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) diff --git a/docs/_media/dinky.png b/docs/_media/dinky.png deleted file mode 100644 index 689d20b032..0000000000 Binary files a/docs/_media/dinky.png and /dev/null differ diff --git a/docs/_media/dinky.svg b/docs/_media/dinky.svg deleted file mode 100644 index 78579c899a..0000000000 --- a/docs/_media/dinky.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/_media/dinky_side.jpg b/docs/_media/dinky_side.jpg deleted file mode 100644 index 434a64cde8..0000000000 Binary files a/docs/_media/dinky_side.jpg and /dev/null differ diff --git a/docs/_media/dlink.png b/docs/_media/dlink.png deleted file mode 100644 index 4e535eedc9..0000000000 Binary files a/docs/_media/dlink.png and /dev/null differ diff --git a/docs/_media/dlink.svg b/docs/_media/dlink.svg deleted file mode 100644 index 8650654dd3..0000000000 --- a/docs/_media/dlink.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/_navbar.md b/docs/_navbar.md deleted file mode 100644 index baf9a7641f..0000000000 --- a/docs/_navbar.md +++ /dev/null @@ -1,12 +0,0 @@ -* [首页](/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/) diff --git a/docs/api/openapi.md b/docs/api/openapi.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/api/openapi.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/babel.config.js b/docs/babel.config.js new file mode 100644 index 0000000000..4e21626692 --- /dev/null +++ b/docs/babel.config.js @@ -0,0 +1,22 @@ +/* + * + * 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')], +}; diff --git a/docs/blog/2022-05-12-kudu-extend.md b/docs/blog/2022-05-12-kudu-extend.md new file mode 100644 index 0000000000..5b0a8fc7cd --- /dev/null +++ b/docs/blog/2022-05-12-kudu-extend.md @@ -0,0 +1,125 @@ +--- +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] +--- +   +本文介绍如何通过 Dinky 整合 Kudu,以支持写 SQL 来实现数据的读取或写入 Kudu。 + +Flink 官网介绍了如何去自定义一个支持 Source 或者 Sink 的 Connector ,这不是本文探讨的重点,本文侧重于用别人已经写好的Connector 去与 Dinky 做集成以支持读写 Kudu。 + + + + +> 注意:以下内容基于 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 +1.13.6 +1.14.0 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + +``` + +这里将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) + +## 总结 +   +目前来说,Dinky 与 Kudu 的整合需要我们做出一些编译工作,甚至是手动对代码的改造,但工作量并不大,并不需要去手动去做 Connector 扩展,在项目使用上 Dinky 提供了较为简单的扩展方式。 + +   +另外,使用 Dinky 去做 Flink 相关任务的开发,不再需要编写大量的 Java 代码去做兼容适配,以 SQL 的方式交互开发,极大降低了 Flink 开发的入门门槛。 + +   +Dinky 提供了很多的任务监控管理,可以很方便得知任务的运行状态并进行管理。 内置了SQL语法检查、运行图展示、运行调试等等的功能,实现了类似在 Zeppelin 上开发 Spark 的体验,大大提高了开发效率。 + +   +我个人很喜欢 Dinky 所提供的功能,并且对其的实现逻辑也很感兴趣,希望 Dinky 能越来越好,功能更强,继续降低 Flink 任务开发的难度和门槛。 + + diff --git a/docs/blog/authors.yml b/docs/blog/authors.yml new file mode 100644 index 0000000000..b4c7863648 --- /dev/null +++ b/docs/blog/authors.yml @@ -0,0 +1,5 @@ +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 diff --git a/docs/blog/blog_img/head_img/header1.png b/docs/blog/blog_img/head_img/header1.png new file mode 100644 index 0000000000..2ad53b7802 Binary files /dev/null and b/docs/blog/blog_img/head_img/header1.png differ diff --git a/docs/blog/blog_img/head_img/header2.png b/docs/blog/blog_img/head_img/header2.png new file mode 100644 index 0000000000..b6925f8d08 Binary files /dev/null and b/docs/blog/blog_img/head_img/header2.png differ diff --git a/docs/blog/blog_img/head_img/header3.gif b/docs/blog/blog_img/head_img/header3.gif new file mode 100644 index 0000000000..70ba617700 Binary files /dev/null and b/docs/blog/blog_img/head_img/header3.gif differ diff --git a/docs/blog/blog_img/kudu_extend/click_running.png b/docs/blog/blog_img/kudu_extend/click_running.png new file mode 100644 index 0000000000..f9bf6b6885 Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/click_running.png differ diff --git a/docs/blog/blog_img/kudu_extend/kudu_table.png b/docs/blog/blog_img/kudu_extend/kudu_table.png new file mode 100644 index 0000000000..aceb3dc569 Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/kudu_table.png differ diff --git a/docs/blog/blog_img/kudu_extend/register_cluster.png b/docs/blog/blog_img/kudu_extend/register_cluster.png new file mode 100644 index 0000000000..44b6bd47dc Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/register_cluster.png differ diff --git a/docs/blog/blog_img/kudu_extend/show_kudu_tabledata.png b/docs/blog/blog_img/kudu_extend/show_kudu_tabledata.png new file mode 100644 index 0000000000..30ba17df86 Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/show_kudu_tabledata.png differ diff --git a/docs/blog/blog_img/kudu_extend/sqldemo_submit1.png b/docs/blog/blog_img/kudu_extend/sqldemo_submit1.png new file mode 100644 index 0000000000..594d181647 Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/sqldemo_submit1.png differ diff --git a/docs/blog/blog_img/kudu_extend/tag_version.png b/docs/blog/blog_img/kudu_extend/tag_version.png new file mode 100644 index 0000000000..5faba2ac57 Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/tag_version.png differ diff --git a/docs/blog/blog_img/kudu_extend/update_kuducatalog.png b/docs/blog/blog_img/kudu_extend/update_kuducatalog.png new file mode 100644 index 0000000000..61629c8cfa Binary files /dev/null and b/docs/blog/blog_img/kudu_extend/update_kuducatalog.png differ diff --git a/docs/docs/administrator_guide/_category_.json b/docs/docs/administrator_guide/_category_.json new file mode 100644 index 0000000000..807b15450c --- /dev/null +++ b/docs/docs/administrator_guide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "用户手册", + "position": 10 +} diff --git a/docs/docs/administrator_guide/data_integration/_category_.json b/docs/docs/administrator_guide/data_integration/_category_.json new file mode 100644 index 0000000000..b2836c6501 --- /dev/null +++ b/docs/docs/administrator_guide/data_integration/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "数据集成", + "position": 4 +} diff --git a/docs/docs/administrator_guide/devops_center/_category_.json b/docs/docs/administrator_guide/devops_center/_category_.json new file mode 100644 index 0000000000..df230944fb --- /dev/null +++ b/docs/docs/administrator_guide/devops_center/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "运维中心", + "position": 2 +} diff --git a/docs/docs/administrator_guide/devops_center/deveops_center_intro.md b/docs/docs/administrator_guide/devops_center/deveops_center_intro.md new file mode 100644 index 0000000000..79f59df809 --- /dev/null +++ b/docs/docs/administrator_guide/devops_center/deveops_center_intro.md @@ -0,0 +1,35 @@ +--- +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 diff --git a/docs/docs/administrator_guide/devops_center/indicators_list.md b/docs/docs/administrator_guide/devops_center/indicators_list.md new file mode 100644 index 0000000000..911b74eb0d --- /dev/null +++ b/docs/docs/administrator_guide/devops_center/indicators_list.md @@ -0,0 +1,62 @@ +--- +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 配置 | + diff --git a/docs/docs/administrator_guide/devops_center/job_details.md b/docs/docs/administrator_guide/devops_center/job_details.md new file mode 100644 index 0000000000..70ab023877 --- /dev/null +++ b/docs/docs/administrator_guide/devops_center/job_details.md @@ -0,0 +1,17 @@ +--- +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 信息 + + 如果您要使用并查看运维中心的更多功能,请详见操作指南 + +::: diff --git a/docs/docs/administrator_guide/devops_center/job_instance_status.md b/docs/docs/administrator_guide/devops_center/job_instance_status.md new file mode 100644 index 0000000000..bad346044e --- /dev/null +++ b/docs/docs/administrator_guide/devops_center/job_instance_status.md @@ -0,0 +1,85 @@ +--- +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 | +| 生命周期 | 开发中
已发布
已上线 | +| 运行模式 | Standalone
Yarn Session
Yarn Per-job
Yarn Application
Kubernetes Session
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 操作,并停止作业 | +| 普通停止 | 作业只停止 | + diff --git a/docs/zh-CN/administrator_guide/hotkey.md b/docs/docs/administrator_guide/hotkey.md similarity index 95% rename from docs/zh-CN/administrator_guide/hotkey.md rename to docs/docs/administrator_guide/hotkey.md index a860a56c7e..63ef907afb 100644 --- a/docs/zh-CN/administrator_guide/hotkey.md +++ b/docs/docs/administrator_guide/hotkey.md @@ -1,3 +1,9 @@ +--- +sidebar_position: 6 +id: feature +title: 快捷键使用指南 +--- + **在数据开发编辑器内可使用以下快捷键** diff --git a/docs/docs/administrator_guide/register_center/_category_.json b/docs/docs/administrator_guide/register_center/_category_.json new file mode 100644 index 0000000000..2f8469247c --- /dev/null +++ b/docs/docs/administrator_guide/register_center/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "注册中心", + "position": 3 +} diff --git a/docs/docs/administrator_guide/register_center/cluster_manage.md b/docs/docs/administrator_guide/register_center/cluster_manage.md new file mode 100644 index 0000000000..a8af06c458 --- /dev/null +++ b/docs/docs/administrator_guide/register_center/cluster_manage.md @@ -0,0 +1,104 @@ +--- +position: 1 +id: cluster_manage +title: 集群管理 +--- + + +提交 FlinkSQL 作业时,首先要保证安装了 Flink 集群。Flink 当前支持的集群模式包括: + +- Standalone 集群 +- Yarn 集群 +- Kubernetes 集群 + +对于以上的三种集群而言,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/register_center/cluster_manage/cluster_manager_list.png) + +![create_flink_cluster](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/create_flink_cluster.png) + +**参数配置说明:** + +- **名称:** 自定义(必填) +- **别名:** 自定义,默认同名称 +- **类型:** 支持 Standalone,Yarn Session 和 Kubernetes Session 三种类型的集群提交任务,其他类型的集群只能查看作业信息 +- **JobManager HA地址:** JobManager 的 RestAPI 地址,当 HA 部署时,将可能出现的多个 RestAPI 地址均写入,且采用英文逗号隔开 +- **注释:** 自定义 + + + +## 集群配置管理 + +集群配置管理适用于 Yarn Per-job、Yarn Application 和 Kubernetes Application 这三种类型配置。 + +对于已经注册的集群配置,您可以对集群配置做编辑、删除和搜索等。 + +### 集群配置 + +单击**注册中心 > 集群管理 > 集群配置管理 > 新建 ** + +![create_cluster_config_1](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/create_cluster_config_1.png) + +![create_cluster_config_2](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/register_center/cluster_manage/create_cluster_config_2.png) + +**参数配置说明:** + +- **类型:** 支持 Flink on Yarn 和 Flink on Kubernetes +- **hadoop 配置** + - **配置文件路径:** hadoop 配置文件路径,指定配置文件路径(末尾无/),需要包含以下文件:core-site.xml,hdfs-site.xml,yarn-site.xml + - **自定义配置(高优先级,目前不生效,请跳过)** + - **ha.zookeeper.quorum:** zookeeper 访问地址 + - **其他配置:** hadoop 的其他参数配置(默认不填写) +- **Flink 配置** + - **lib 路径:** 指定 lib 的 hdfs 路径(末尾无/),需要包含 Flink 运行时的依赖 + - **配置文件路径:** 指定 flink-conf.yaml 的具体路径(末尾无/),必填 + - **自定义配置(高优先级):** Flink参数配置 +- **基本配置** + - **标识:** 唯一英文标识(必填) + - **名称:** 自定义,默认同标识 + - **注释:** 自定义 + - **是否启用:** 默认禁用,需要开启 + +## 查看集群信息 + +创建集群后可在**集群实例管理**后者**集群配置**中查看集群信息。 + +集群信息相关字段含义如下: + +| 字段 | 说明 | +| :------------: | :----------------------------------------------------------: | +| 名称 | 名称是唯一的 | +| 别名 | 自定义 | +| 类型 | Standalone
Yarn Session
Yarn Per-job
Yarn Application
Kubernetes Session
Kubernetes Application | +| JobManager地址 | Rest API地址 | +| 版本 | Flink 版本 | +| 状态 | 正常
异常 | +| 是否启用 | 已启用
已禁用 | +| 注册方式 | 手动
自动 | +| 最近更新时间 | 集群信息修改时间 | +| 操作 | 对集群做编辑、删除操作 | + +:::warning 注意事项 + + 当非Session类作业提交和发布后,作业会成为一个集群实例而存在 + +::: + diff --git a/docs/zh-CN/administrator_guide/register_center/datasource_manage.md b/docs/docs/administrator_guide/register_center/datasource_manage.md similarity index 77% rename from docs/zh-CN/administrator_guide/register_center/datasource_manage.md rename to docs/docs/administrator_guide/register_center/datasource_manage.md index d88d997631..9a4e62e578 100644 --- a/docs/zh-CN/administrator_guide/register_center/datasource_manage.md +++ b/docs/docs/administrator_guide/register_center/datasource_manage.md @@ -1,13 +1,19 @@ +--- +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)。 diff --git a/docs/zh-CN/administrator_guide/register_center/document_manager.md b/docs/docs/administrator_guide/register_center/document_manager.md similarity index 70% rename from docs/zh-CN/administrator_guide/register_center/document_manager.md rename to docs/docs/administrator_guide/register_center/document_manager.md index eff6fba597..57659dd6c1 100644 --- a/docs/zh-CN/administrator_guide/register_center/document_manager.md +++ b/docs/docs/administrator_guide/register_center/document_manager.md @@ -1,18 +1,25 @@ +--- +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) diff --git a/docs/docs/administrator_guide/register_center/jar_manager.md b/docs/docs/administrator_guide/register_center/jar_manager.md new file mode 100644 index 0000000000..143467e69f --- /dev/null +++ b/docs/docs/administrator_guide/register_center/jar_manager.md @@ -0,0 +1,54 @@ +--- +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 的启动类入参 | +| 是否启用 | 已启用
已禁用 | +| 最近更新时间 | Jar 包的修改时间 | +| 操作 | 对 Jar 包修改、删除 | + +:::warning 注意事项 + + 目前 jar 包提交的方式只支持 Yarn Application 模式 + +::: \ No newline at end of file diff --git a/docs/zh-CN/administrator_guide/register_center/warning.md b/docs/docs/administrator_guide/register_center/warning.md similarity index 71% rename from docs/zh-CN/administrator_guide/register_center/warning.md rename to docs/docs/administrator_guide/register_center/warning.md index 0b28af2544..f85529c963 100644 --- a/docs/zh-CN/administrator_guide/register_center/warning.md +++ b/docs/docs/administrator_guide/register_center/warning.md @@ -1,3 +1,12 @@ +--- +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
DingTalk
FeiShu
Email | +| 是否启用 | 已启用
已禁用 | +| 最近更新时间 | 报警的修改时间 | +| 操作 | 对报警实例修改、删除 | + + + ## 报警组管理 +### 创建报警组 + 新建一个报警组,选择新建 -![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) + +### 查询报警组信息 + +报警组信息相关字段含义如下: + +| 字段 | 说明 | +| :----------: | :------------------: | +| 名称 | 名称唯一 | +| 是否启用 | 已启用
已禁用 | +| 最近更新时间 | 报警的修改时间 | +| 操作 | 对报警实例修改、删除 | -![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 diff --git a/docs/docs/administrator_guide/studio/_category_.json b/docs/docs/administrator_guide/studio/_category_.json new file mode 100644 index 0000000000..ad5f36c8c8 --- /dev/null +++ b/docs/docs/administrator_guide/studio/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "数据开发", + "position": 1 +} diff --git a/docs/docs/administrator_guide/studio/catalog_manage.md b/docs/docs/administrator_guide/studio/catalog_manage.md new file mode 100644 index 0000000000..778de874e0 --- /dev/null +++ b/docs/docs/administrator_guide/studio/catalog_manage.md @@ -0,0 +1,33 @@ +--- +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)说明 | + +### 前提条件 + +已在 Hive Metastore 侧开启了 Hive Metastore 服务。 +相关命令如下: + +- `hive --service metastore`:开启 Hive Metastore 服务。 +- `ps -ef|grep metastore`:查询 Hive Metastore 服务是否已开启 \ No newline at end of file diff --git a/docs/docs/administrator_guide/studio/development_control/_category_.json b/docs/docs/administrator_guide/studio/development_control/_category_.json new file mode 100644 index 0000000000..a9939a6d63 --- /dev/null +++ b/docs/docs/administrator_guide/studio/development_control/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "基本介绍", + "position": 1 +} diff --git a/docs/zh-CN/administrator_guide/studio/development_control/component_introduce.md b/docs/docs/administrator_guide/studio/development_control/component_introduce.md similarity index 90% rename from docs/zh-CN/administrator_guide/studio/development_control/component_introduce.md rename to docs/docs/administrator_guide/studio/development_control/component_introduce.md index f5d203bbd3..cc2c0d76df 100644 --- a/docs/zh-CN/administrator_guide/studio/development_control/component_introduce.md +++ b/docs/docs/administrator_guide/studio/development_control/component_introduce.md @@ -1,3 +1,11 @@ +--- +sidebar_position: 2 +id: component_introduce +title: 方言介绍 +--- + + + 目前支持的方言有: - FlinkSql - FlinkJar diff --git a/docs/docs/administrator_guide/studio/development_control/function_introduce.md b/docs/docs/administrator_guide/studio/development_control/function_introduce.md new file mode 100644 index 0000000000..b540ac387c --- /dev/null +++ b/docs/docs/administrator_guide/studio/development_control/function_introduce.md @@ -0,0 +1,47 @@ +--- +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 说明 + + 以上数据开发功能解释及说明,详见相关章节内容 + +::: diff --git a/docs/zh-CN/administrator_guide/studio/job_dev/env_config.md b/docs/docs/administrator_guide/studio/env_config.md similarity index 54% rename from docs/zh-CN/administrator_guide/studio/job_dev/env_config.md rename to docs/docs/administrator_guide/studio/env_config.md index eb7662becf..8d971ba771 100644 --- a/docs/zh-CN/administrator_guide/studio/job_dev/env_config.md +++ b/docs/docs/administrator_guide/studio/env_config.md @@ -1,3 +1,12 @@ +--- +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 diff --git a/docs/docs/administrator_guide/studio/job_config.md b/docs/docs/administrator_guide/studio/job_config.md new file mode 100644 index 0000000000..d296b83115 --- /dev/null +++ b/docs/docs/administrator_guide/studio/job_config.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 2 +id: job_config +title: 作业基础配置 +--- + +Dinky 使用 Flink 社区开源版本,也完全兼容企业二次开发的 Flink 版本。本文介绍如何配置 Flink 的作业。 + +## 作业配置 + +FlinkSQL 作业配置,您可以根据具体需求配置参数,参数设置如下 + +| 类型 | 配置项 | 备注 | +| :------: | :------------: |:------------------------------------------------------------------------------------------------------------------------| +| 作业配置 | 执行模式 | 指定 FlinkSQL 的执行模式,默认为local | +| 作业配置 | Flink集群 | 此参数依据执行模式选择需要的集群实例或者集群配置 | +| 作业配置 | 作业名称 | 默认作业名,作业名称在当前项目中必须保持 **唯一** | +| 作业配置 | FlinkSQL 环境 | 选择当前 FlinkSQL 执行环境,会提前执行环境语句,默认无 | +| 作业配置 | 任务并行度 | 设置Flink任务的并行度,默认为 1 | +| 作业配置 | Insert 语句集 | 默认禁用,开启语句集机制,将多个 Insert 语句合并成一个JobGraph
进行提交,select 语句无效 | +| 作业配置 | 全局变量 | 默认禁用,开启 FlinkSQL 全局变量,以“${}”进行调用 | +| 作业配置 | 批模式 | 默认禁用,开启后启用 Batch Mode | +| 作业配置 | SavePoint 策略 | 默认禁用,策略包括:
**最近一次**
**最早一次**
**指定一次** | +| 作业配置 | 报警组 | 报警组配置详见[报警管理](../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
默认不开启则返回最终结果 | +| 执行配置 | 最大行数 | 预览数据的最大行数,默认100 | +| 执行配置 | 自动停止 | 默认禁用,开启自动停止将在捕获最大行记录数后自动停止 | + +## 保存点 + +Dinky 提供 FlinkSQL 在通过 **cancel** 作业停止时,自动保存**savepoint**。并生成一个保存 savepoint 的创建时间。 + +:::tip 说明 + +​ 此保存点必须通过 **Flink Cancel** 完成 + +::: diff --git a/docs/zh-CN/administrator_guide/studio/job_dev/job_hosting.md b/docs/docs/administrator_guide/studio/job_hosting.md similarity index 66% rename from docs/zh-CN/administrator_guide/studio/job_dev/job_hosting.md rename to docs/docs/administrator_guide/studio/job_hosting.md index b69a3cff94..713c390e04 100644 --- a/docs/zh-CN/administrator_guide/studio/job_dev/job_hosting.md +++ b/docs/docs/administrator_guide/studio/job_hosting.md @@ -1,3 +1,12 @@ +--- +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) + +::: + diff --git a/docs/docs/administrator_guide/studio/job_log.md b/docs/docs/administrator_guide/studio/job_log.md new file mode 100644 index 0000000000..bf234cdfc0 --- /dev/null +++ b/docs/docs/administrator_guide/studio/job_log.md @@ -0,0 +1,20 @@ +--- +sidebar_position: 5 +id: job_log +title: 作业日志 +--- + +## 查看启动和运行日志 + +在作业为运行状态时,您可以查看其启动日志和运行日志。 + +| 类型 | 说明 | +| :------: | :----------------------------------------------------------: | +| 启动日志 | FlinkSQL 作业启动时的日志,即从FlinkSQL 环境被初始化一直到Job Manager被启动起来中间日志 | +| 运行日志 | Flink的Job Manager和Task Managers的日志可以运维中心查看,也可以在Flink UI界面查看 | + +:::tip 说明 + +启动日志中包含启动作业失败的原因,例如 SQL字段不一致,资源不足等 + +::: diff --git a/docs/docs/administrator_guide/studio/job_monitoring.md b/docs/docs/administrator_guide/studio/job_monitoring.md new file mode 100644 index 0000000000..3b0ac3192e --- /dev/null +++ b/docs/docs/administrator_guide/studio/job_monitoring.md @@ -0,0 +1,32 @@ +--- +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 diff --git a/docs/docs/administrator_guide/studio/job_submit.md b/docs/docs/administrator_guide/studio/job_submit.md new file mode 100644 index 0000000000..1b5a047412 --- /dev/null +++ b/docs/docs/administrator_guide/studio/job_submit.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 3 +id: job_submit +title: 作业提交 +--- + +本文为您介绍如何提交 FlinkSQL 作业至集群,以及 DB SQL提交至数据库。Dinky 提供了三种提交作业的方式,分别是: + +- 执行当前SQL +- 异步提交 +- 上线下线发布 + +各提交作业的支持的执行模式及说明如下 + +| SQL类型 | 提交方式 | 执行模式 | 说明 | +| :------: | :----------: | :----------------------------------------------------------: | :---------------------------------------------------------- | +| FlinkSQL | 执行当前SQL | local
Standalone
Yarn Session
Kubernetes Session | 适用场景:`调试作业` | +| FlinkSQL | 异步提交 | Standalone
Yarn Session
Yarn Per-job
Yarn Application
Kubernetes Session
Kubernetes Application | 适用场景:`远程提交作业至集群` | +| FlinkSQL | 上线下线发布 | Standalone
Yarn Session
Yarn Per-job
Yarn Application
Kubernetes Session
Kubernetes Application | 适用场景:
1.`远程发布作业至集群`
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适合调试作业并可以看到错误信息,而异步提交只显示作业提交失败; + +::: diff --git a/docs/zh-CN/administrator_guide/metadata.md b/docs/docs/administrator_guide/studio/metadata.md similarity index 67% rename from docs/zh-CN/administrator_guide/metadata.md rename to docs/docs/administrator_guide/studio/metadata.md index f4bd7c8bb7..d732ecaa9e 100644 --- a/docs/zh-CN/administrator_guide/metadata.md +++ b/docs/docs/administrator_guide/studio/metadata.md @@ -1,3 +1,10 @@ +--- +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)。 diff --git a/docs/zh-CN/api/openapi.md b/docs/docs/administrator_guide/studio/openapi.md similarity index 99% rename from docs/zh-CN/api/openapi.md rename to docs/docs/administrator_guide/studio/openapi.md index fe5ccdde6e..297cf90df1 100644 --- a/docs/zh-CN/api/openapi.md +++ b/docs/docs/administrator_guide/studio/openapi.md @@ -1,3 +1,9 @@ +--- +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 diff --git a/docs/docs/administrator_guide/system_setting/_category_.json b/docs/docs/administrator_guide/system_setting/_category_.json new file mode 100644 index 0000000000..852e617279 --- /dev/null +++ b/docs/docs/administrator_guide/system_setting/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "系统设置", + "position": 5 +} diff --git a/docs/zh-CN/administrator_guide/system_setting/Flink_Setting.md b/docs/docs/administrator_guide/system_setting/flink_setting.md similarity index 92% rename from docs/zh-CN/administrator_guide/system_setting/Flink_Setting.md rename to docs/docs/administrator_guide/system_setting/flink_setting.md index c79a617f47..feb216ca51 100644 --- a/docs/zh-CN/administrator_guide/system_setting/Flink_Setting.md +++ b/docs/docs/administrator_guide/system_setting/flink_setting.md @@ -1,10 +1,19 @@ +--- +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) **参数配置说明:** diff --git a/docs/docs/administrator_guide/system_setting/user_management.md b/docs/docs/administrator_guide/system_setting/user_management.md new file mode 100644 index 0000000000..36174c19a4 --- /dev/null +++ b/docs/docs/administrator_guide/system_setting/user_management.md @@ -0,0 +1,69 @@ +--- +position: 1 +id: user_management +title: 用户管理 +--- + + + + +系统设置中的用户管理功能,包含添加或删除用户、修改密码等。此用户管理中的用户仅限于登录 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) + + +**参数配置:** + +- **用户名:** 自定义; +- **昵称:** 自定义; +- **工号:** 可定义一个唯一值; +- **手机号:** 用户使用的手机号; +- **是否启用:** 默认禁用,需要开启; + +## 密码修改 + +- 普通用户创建好后,**默认密码**是 **123456**, +- **admin 用户**密码是 **admin** 。为避免信息泄露,**在生产环境建议用户修改密码**。 + +首先进入 **系统设置**,选择 **用户管理**,点击对应用户的密码修改即可。 + +![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。 + + + +## 用户管理 + +当您添加用户后,可以对用户做修改、删除和修改密码等操作。 + +![user_manager](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/system_setting/user_management/user_manager.png) + +用户管理相关字段含义如下: + +| 字段 | 说明 | +| :----------: | :----------------------------------: | +| 用户名 | 自定义 | +| 昵称 | 自定义 | +| 工号 | 唯一值 | +| 手机号 | 用户使用的手机号 | +| 是否启用 | 已启用
已禁用 | +| 最近更新时间 | 用户信息的修改时间 | +| 操作 | 对用户信息做编辑、删除、修改密码操作 | + +:::warning 注意事项 + +​ admin 用户在 Dinky 是最高权限用户,无法删除,只能修改密码 + +::: diff --git a/docs/docs/build_deploy/_category_.json b/docs/docs/build_deploy/_category_.json new file mode 100644 index 0000000000..c55a4e31d1 --- /dev/null +++ b/docs/docs/build_deploy/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "编译和部署", + "position": 4 +} diff --git a/docs/zh-CN/deploy/build.md b/docs/docs/build_deploy/build.md similarity index 82% rename from docs/zh-CN/deploy/build.md rename to docs/docs/build_deploy/build.md index 4992747386..245cbee516 100644 --- a/docs/zh-CN/deploy/build.md +++ b/docs/docs/build_deploy/build.md @@ -1,3 +1,11 @@ +--- +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) diff --git a/docs/zh-CN/deploy/deploy.md b/docs/docs/build_deploy/deploy.md similarity index 71% rename from docs/zh-CN/deploy/deploy.md rename to docs/docs/build_deploy/deploy.md index db9c57ddd1..0e3301824e 100644 --- a/docs/zh-CN/deploy/deploy.md +++ b/docs/docs/build_deploy/deploy.md @@ -1,4 +1,11 @@ -## 单机部署 +--- +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/) +::: diff --git a/docs/zh-CN/others/comminicate.md b/docs/docs/comminicate.md similarity index 85% rename from docs/zh-CN/others/comminicate.md rename to docs/docs/comminicate.md index b821bbbda1..b7084ef564 100644 --- a/docs/zh-CN/others/comminicate.md +++ b/docs/docs/comminicate.md @@ -1,3 +1,9 @@ +--- +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 diff --git a/docs/docs/concept_architecture/_category_.json b/docs/docs/concept_architecture/_category_.json new file mode 100644 index 0000000000..3adadb7094 --- /dev/null +++ b/docs/docs/concept_architecture/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "概念和架构", + "position": 2 +} diff --git a/docs/docs/concept_architecture/architecture.md b/docs/docs/concept_architecture/architecture.md new file mode 100644 index 0000000000..1461bba39f --- /dev/null +++ b/docs/docs/concept_architecture/architecture.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +id: architecture +title: 系统架构 +--- + +![Dinky](http://www.aiwenmo.com/dinky/docs/zh-CN/concept_architecture/architecture/dinky.png) diff --git a/docs/zh-CN/concept.md b/docs/docs/concept_architecture/concept.md similarity index 88% rename from docs/zh-CN/concept.md rename to docs/docs/concept_architecture/concept.md index e835a40d17..0054bef889 100644 --- a/docs/zh-CN/concept.md +++ b/docs/docs/concept_architecture/concept.md @@ -1,58 +1,64 @@ -**JobManager** +--- +sidebar_position: 2 +id: concept +title: 基本概念 +--- + +**JobManager** JobManager 作为 Dinky 的作业管理的统一入口,负责 Flink 的各种作业执行方式及其他功能的调度。 -**Executor** +**Executor** Executor 是 Dinky 定制的 FlinkSQL 执行器,来模拟真实的 Flink 执行环境,负责 FlinkSQL 的 Catalog 管理、UDF管理、片段管理、配置管理、语句集管理、语法校验、逻辑验证、计划优化、生成 JobGraph、本地执行、远程提交、SELECT 及 SHOW 预览等核心功能。 -**Interceptor** +**Interceptor** Interceptor 是 Dinky 的 Flink 执行拦截器,负责对其进行片段解析、UDF注册、SET 和 AGGTABLE 等增强语法解析。 -**Gateway** +**Gateway** Gateway 并非是开源项目 flink-sql-gateway,而是 Dinky 自己定制的 Gateway,负责进行基于 Yarn 环境的任务提交与管理,主要有Yarn-Per-Job 和 Yarn-Application 的 FlinkSQL 提交、停止、SavePoint 以及配置测试,而 User Jar 目前只开放了 Yarn-Application 的提交。 -**Flink SDK** +**Flink SDK** Dinky 主要通过调用 flink-client 和 flink-table 模块进行二次开发。 -**Yarn SDK** +**Yarn SDK** Dinky 通过调用 flink-yarn 模块进行二次开发。 -**Flink API** +**Flink API** Dinky 也支持通过调用 JobManager 的 RestAPI 对任务进行管理等操作,系统配置可以控制开启和停用。 -**Local** +**Local** Dinky 自身的 Flink 环境,通过 plugins 下的 Flink 依赖进行构建,主要用于语法校验和逻辑检查、生成 JobPlan 和 JobGraph、字段血缘分析等功能。 注意:目前请不要用该模式执行或提交流作业,将会无法关闭,需要重启进程才可。 -**Standalone** +**Standalone** Dinky 通过已注册的 Flink Standalone 集群实例可以对远程集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。 -**Yarn-Session** +**Yarn-Session** Dinky 通过已注册的 Flink Yarn Session 集群实例可以对远程集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。 -**Yarn-Per-Job** +**Yarn-Per-Job** Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例,然后将 Local 模式解析生成的 JobGraph 与 Configuration 提交至 Yarn 来创建 Flink Per-Job 应用。 -**Yarn-Application** +**Yarn-Application** Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对于 User Jar,将 Jar 相关配置与 Configuration 提交至 Yarn 来创建 Flink-Application 应用;对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和 dlink-app.jar 以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。 -**Kubernetes-Session** +**Kubernetes-Session** Dinky 通过已注册的 Flink Kubernetes Session 集群实例可以对远程集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。 注意需要暴露 NodePort。 -**Kubernetes-Application** +**Kubernetes-Application** Dinky 通过已注册的集群配置来获取对应的 FlinkKubeClient 实例。对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和定制的 dlink-app.jar 镜像以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。 注意需要自己打包 dlink-app 镜像,具体见文章。 diff --git a/docs/docs/connector/_category_.json b/docs/docs/connector/_category_.json new file mode 100644 index 0000000000..1bd2cf0e10 --- /dev/null +++ b/docs/docs/connector/_category_.json @@ -0,0 +1,4 @@ +{ + "label": " Connector", + "position": 11 +} diff --git a/docs/docs/connector/flinksql_connectors.md b/docs/docs/connector/flinksql_connectors.md new file mode 100644 index 0000000000..5696dc47d0 --- /dev/null +++ b/docs/docs/connector/flinksql_connectors.md @@ -0,0 +1,29 @@ +--- +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 四个版本,对应的版本支持所有开源的上下游存储系统具体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/) + +另外非 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) \ No newline at end of file diff --git a/docs/docs/data_integration_guide/_category_.json b/docs/docs/data_integration_guide/_category_.json new file mode 100644 index 0000000000..fcbbaf5abf --- /dev/null +++ b/docs/docs/data_integration_guide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "数据集成指南", + "position": 9 +} diff --git a/docs/docs/data_integration_guide/cdcsource_statements.md b/docs/docs/data_integration_guide/cdcsource_statements.md new file mode 100644 index 0000000000..fae4b189b9 --- /dev/null +++ b/docs/docs/data_integration_guide/cdcsource_statements.md @@ -0,0 +1,229 @@ +--- +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 diff --git a/docs/docs/developer_guide/_category_.json b/docs/docs/developer_guide/_category_.json new file mode 100644 index 0000000000..5ae564ba7b --- /dev/null +++ b/docs/docs/developer_guide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "开发者指南", + "position": 12 +} diff --git a/docs/docs/developer_guide/contribution/_category_.json b/docs/docs/developer_guide/contribution/_category_.json new file mode 100644 index 0000000000..8e961fc8c4 --- /dev/null +++ b/docs/docs/developer_guide/contribution/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "参与贡献", + "position": 1 +} diff --git a/docs/zh-CN/developer_guide/commit_code.md b/docs/docs/developer_guide/contribution/commit_code.md similarity index 96% rename from docs/zh-CN/developer_guide/commit_code.md rename to docs/docs/developer_guide/contribution/commit_code.md index 9a5f04160d..b694745dbc 100644 --- a/docs/zh-CN/developer_guide/commit_code.md +++ b/docs/docs/developer_guide/contribution/commit_code.md @@ -1,3 +1,11 @@ +--- +sidebar_position: 6 +id: commit_code +title: 提交代码须知 +--- + + + # 提交代码 * 首先从远端仓库 *https://github.com/DataLinkDC/dlink.git* fork 一份代码到自己的仓库中 diff --git a/docs/zh-CN/developer_guide/commit_message.md b/docs/docs/developer_guide/contribution/commit_message.md similarity index 98% rename from docs/zh-CN/developer_guide/commit_message.md rename to docs/docs/developer_guide/contribution/commit_message.md index 170b5d640d..927190f392 100644 --- a/docs/zh-CN/developer_guide/commit_message.md +++ b/docs/docs/developer_guide/contribution/commit_message.md @@ -1,3 +1,14 @@ +--- +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 官方文档制定了该规约。 diff --git a/docs/zh-CN/developer_guide/document.md b/docs/docs/developer_guide/contribution/document.md similarity index 74% rename from docs/zh-CN/developer_guide/document.md rename to docs/docs/developer_guide/contribution/document.md index 37b8e787b3..821ba8b316 100644 --- a/docs/zh-CN/developer_guide/document.md +++ b/docs/docs/developer_guide/contribution/document.md @@ -1,17 +1,26 @@ +--- +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//dlink +git clone https://github.com//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/) diff --git a/docs/zh-CN/developer_guide/how_contribute.md b/docs/docs/developer_guide/contribution/how_contribute.md similarity index 70% rename from docs/zh-CN/developer_guide/how_contribute.md rename to docs/docs/developer_guide/contribution/how_contribute.md index 7e05c19829..7e77d255c8 100644 --- a/docs/zh-CN/developer_guide/how_contribute.md +++ b/docs/docs/developer_guide/contribution/how_contribute.md @@ -1,3 +1,11 @@ +--- +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 diff --git a/docs/zh-CN/developer_guide/issue.md b/docs/docs/developer_guide/contribution/issue.md similarity index 50% rename from docs/zh-CN/developer_guide/issue.md rename to docs/docs/developer_guide/contribution/issue.md index d51f6153d4..a4f7bc556b 100644 --- a/docs/zh-CN/developer_guide/issue.md +++ b/docs/docs/developer_guide/contribution/issue.md @@ -1,3 +1,8 @@ +--- +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 类型`如下: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- +| 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 | 其中`模块名`如下: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
模块名描述
admin管理模块
alert报警模块
appFlink APP 模块
assembly打包模块
clientFlink Client 模块
common基础模块
connectorsFlink Connector 模块
core核心模块
daemon守护线程模块
doc资源模块
docs官网文档
executor执行器模块
extends扩展模块
functionFlink UDF 模块
gateway提交网关模块
metadata元数据模块
webWeb 模块
- +| 模块名 | 描述 | +| ------------ | ---------------------- | +| 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 的用户去修改成对应的标题。 diff --git a/docs/zh-CN/developer_guide/pull_request.md b/docs/docs/developer_guide/contribution/pull_request.md similarity index 73% rename from docs/zh-CN/developer_guide/pull_request.md rename to docs/docs/developer_guide/contribution/pull_request.md index dcf7ab6d90..16fff19888 100644 --- a/docs/zh-CN/developer_guide/pull_request.md +++ b/docs/docs/developer_guide/contribution/pull_request.md @@ -1,3 +1,8 @@ +--- +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 类型`的对应关系如下: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Issue 类型Pull Request 类型样例(假设 Issue 号为 3333)
FeatureFeature[Feature-3333][admin] Implement xxx
BugFix[Fix-3333][admin] Fix xxx
ImprovementImprovement[Improvement-3333][alert] Improve the performance of xxx
TestTest[Test-3333][metadata-mysql] Add the e2e test of xxx
Sub-TaskSub-Task 对应的父类型[Feature-3333][admin] Implement xxx
- +| 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 本质上是一种软件的合作方式,是将涉及不同功能 checkstyle idea configuration

- - 截止目前,Checkstyle 插件已经配置完成了,当有代码或者文件不符合风格时就会显示在 Checkstyle 中。但强烈建议同时配置 Intellij IDEA 的代码风格,完成配置后可以使用 Intellij IDEA 自动格式化功能。你可以在路径`Preferences -> Editor -> Code Style -> Java`找到配置,请参照下图完成其配置

code style idea configuration

- - 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 的压力也会小。 diff --git a/docs/zh-CN/developer_guide/local_debug.md b/docs/docs/developer_guide/local_debug.md similarity index 82% rename from docs/zh-CN/developer_guide/local_debug.md rename to docs/docs/developer_guide/local_debug.md index 01fcf825b1..359334ca63 100644 --- a/docs/zh-CN/developer_guide/local_debug.md +++ b/docs/docs/developer_guide/local_debug.md @@ -1,3 +1,16 @@ +--- +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。多多分享,让社区发展更快,十分感谢。 ## 任务执行路线 diff --git a/docs/zh-CN/developer_guide/remote_debug.md b/docs/docs/developer_guide/remote_debug.md similarity index 79% rename from docs/zh-CN/developer_guide/remote_debug.md rename to docs/docs/developer_guide/remote_debug.md index 6013f781de..2088c29736 100644 --- a/docs/zh-CN/developer_guide/remote_debug.md +++ b/docs/docs/developer_guide/remote_debug.md @@ -1,3 +1,10 @@ +--- +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**,修改如下: ``` @@ -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 注意事项 +如果拉取了新代码,远程调试环境一定要检查一遍,以防各种报错。 +::: diff --git a/docs/docs/extend/_category_.json b/docs/docs/extend/_category_.json new file mode 100644 index 0000000000..361184e375 --- /dev/null +++ b/docs/docs/extend/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "扩展", + "position": 13 +} diff --git a/docs/docs/extend/function_expansion/_category_.json b/docs/docs/extend/function_expansion/_category_.json new file mode 100644 index 0000000000..3cc459fe9e --- /dev/null +++ b/docs/docs/extend/function_expansion/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "功能扩展", + "position": 2 +} diff --git a/docs/zh-CN/extend/alert.md b/docs/docs/extend/function_expansion/alert.md similarity index 70% rename from docs/zh-CN/extend/alert.md rename to docs/docs/extend/function_expansion/alert.md index 592fb804c0..2497385197 100644 --- a/docs/zh-CN/extend/alert.md +++ b/docs/docs/extend/function_expansion/alert.md @@ -1,4 +1,13 @@ -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 (); ``` -同时在下方定义 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)? ( />: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>({ 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 diff --git a/docs/zh-CN/extend/completion.md b/docs/docs/extend/function_expansion/completion.md similarity index 96% rename from docs/zh-CN/extend/completion.md rename to docs/docs/extend/function_expansion/completion.md index bf975f69cb..652aab6d32 100644 --- a/docs/zh-CN/extend/completion.md +++ b/docs/docs/extend/function_expansion/completion.md @@ -1,3 +1,12 @@ +--- +sidebar_position: 5 +id: completion +title: FlinkSQL 编辑器自动补全函数 +--- + + + + ## FlinkSQL 编辑器自动补全函数 Dlink-0.3.2 版本上线了一个非常实用的功能——自动补全。 diff --git a/docs/zh-CN/extend/connector.md b/docs/docs/extend/function_expansion/connector.md similarity index 72% rename from docs/zh-CN/extend/connector.md rename to docs/docs/extend/function_expansion/connector.md index d82d778f52..8b54177140 100644 --- a/docs/zh-CN/extend/connector.md +++ b/docs/docs/extend/function_expansion/connector.md @@ -1,3 +1,12 @@ +--- +sidebar_position: 2 +id: connector +title: 扩展连接器 +--- + + + + ## 扩展 Connector 将 Flink 集群上已扩展好的 Connector 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 Connector 过程同 Flink 官方一样。 diff --git a/docs/docs/extend/function_expansion/datasource.md b/docs/docs/extend/function_expansion/datasource.md new file mode 100644 index 0000000000..d7a6e440f3 --- /dev/null +++ b/docs/docs/extend/function_expansion/datasource.md @@ -0,0 +1,623 @@ +--- +sidebar_position: 3 +id: datasource +title: 扩展数据源 +--- + + + + + Dinky 数据源遵循 SPI,可随意扩展所需要的数据源。数据源扩展可在 dlink-metadata 模块中进行可插拔式扩展。现已经支持的数据源包括如下: + + - MySQL + - Oracle + - SQLServer + - PostGreSQL + - Phoenix + - Doris(Starrocks) + - ClickHouse + - Hive ``需要的jar包: hive-jdbc-2.1.1.jar && hive-service-2.1.1.jar`` + +使用以上数据源,详见注册中心[数据源管理](../../administrator_guide/register_center/datasource_manage),配置数据源连接 +:::tip 注意事项 + Dinky 不在对 Starorcks 进行额外扩展,Doris 和 Starorcks 底层并无差别,原则上只是功能区分。经社区测试验证,可采用 Doris 扩展连接 Starrocks。 +::: +---- + +## 准备工作 +- 本地开发环境搭建 + - 详见 [开发者本地调试手册](../../developer_guide/local_debug) + +## 后端开发 +- 本文以 Hive 数据源扩展为例 +- 在 **dlink-metadata** 模块中, 右键**新建子模块**, 命名规则: **dlink-metadata-{数据源名称}** +- **代码层面** + - 注意事项: + - 不可在父类的基础上修改代码,可以在子类中进行扩展 ,或者重写父类方法 + - 扩展数据源需要同时提交**测试用例** + - 在此模块的 **pom.xml** 中,添加所需依赖, 需要注意的是 : 数据源本身的 ``JDBC``的 jar 不要包含在打包中 , 而是后续部署时,添加在 ``plugins`` 下 + - 需要在此模块的 **resource** 下 新建包 ``META-INF.services`` , 在此包中新建文件 ``com.dlink.metadata.driver.Driver`` 内容如下: + - ``com.dlink.metadata.driver.数据源类型Driver`` + 基础包: +```bash +顶层包名定义: com.dlink.metadata + 子包含义: + - constant: 常量定义 目前此模块中主要定义各种动态构建的执行 SQL + - convert: 存放数据源的数据类型<->Java 类型的转换类 ps: 可以不定义 不定义使用 dlink-metadata-base 的默认转换 即调用父类的方法 + - driver: 存放数据源驱动类,获取元数据的主要类,类 extends AbstractJdbcDriver implements Driver + - query : 存放解析获取元数据的主要类,类 extends AbstractDBQuery 方法不重写 默认使用父类 +``` +代码如下: + +HiveConstant +```java +public interface HiveConstant { + + /** + * 查询所有database + */ + String QUERY_ALL_DATABASE = " show databases"; + /** + * 查询所有schema下的所有表 + */ + String QUERY_ALL_TABLES_BY_SCHEMA = "show tables"; + /** + * 扩展信息Key + */ + String DETAILED_TABLE_INFO = "Detailed Table Information"; + /** + * 查询指定schema.table的扩展信息 + */ + String QUERY_TABLE_SCHEMA_EXTENED_INFOS = " describe extended `%s`.`%s`"; + /** + * 查询指定schema.table的信息 列 列类型 列注释 + */ + String QUERY_TABLE_SCHEMA = " describe `%s`.`%s`"; + /** + * 使用 DB + */ + String USE_DB = "use `%s`"; + /** + * 只查询指定schema.table的列名 + */ + String QUERY_TABLE_COLUMNS_ONLY = "show columns in `%s`.`%s`"; +} + +``` + +HiveTypeConvert +```java + +public class HiveTypeConvert implements ITypeConvert { + // 主要是将获取到的数据类型转换为 Java 数据类型的映射 存储在 Column 中 , 此处根据扩展的数据源特性进行修改 + @Override + public ColumnType convert(Column column) { + if (Asserts.isNull(column)) { + return ColumnType.STRING; + } + String t = column.getType().toLowerCase().trim(); + if (t.contains("char")) { + return ColumnType.STRING; + } else if (t.contains("boolean")) { + if (column.isNullable()) { + return ColumnType.JAVA_LANG_BOOLEAN; + } + return ColumnType.BOOLEAN; + } else if (t.contains("tinyint")) { + if (column.isNullable()) { + return ColumnType.JAVA_LANG_BYTE; + } + return ColumnType.BYTE; + } else if (t.contains("smallint")) { + if (column.isNullable()) { + return ColumnType.JAVA_LANG_SHORT; + } + return ColumnType.SHORT; + } else if (t.contains("bigint")) { + if (column.isNullable()) { + return ColumnType.JAVA_LANG_LONG; + } + return ColumnType.LONG; + } else if (t.contains("largeint")) { + return ColumnType.STRING; + } else if (t.contains("int")) { + if (column.isNullable()) { + return ColumnType.INTEGER; + } + return ColumnType.INT; + } else if (t.contains("float")) { + if (column.isNullable()) { + return ColumnType.JAVA_LANG_FLOAT; + } + return ColumnType.FLOAT; + } else if (t.contains("double")) { + if (column.isNullable()) { + return ColumnType.JAVA_LANG_DOUBLE; + } + return ColumnType.DOUBLE; + } else if (t.contains("timestamp")) { + return ColumnType.TIMESTAMP; + } else if (t.contains("date")) { + return ColumnType.STRING; + } else if (t.contains("datetime")) { + return ColumnType.STRING; + } else if (t.contains("decimal")) { + return ColumnType.DECIMAL; + } else if (t.contains("time")) { + return ColumnType.DOUBLE; + } + return ColumnType.STRING; + } + + // 转换为 DB 的数据类型 + @Override + public String convertToDB(ColumnType columnType) { + switch (columnType) { + case STRING: + return "varchar"; + case BOOLEAN: + case JAVA_LANG_BOOLEAN: + return "boolean"; + case BYTE: + case JAVA_LANG_BYTE: + return "tinyint"; + case SHORT: + case JAVA_LANG_SHORT: + return "smallint"; + case LONG: + case JAVA_LANG_LONG: + return "bigint"; + case FLOAT: + case JAVA_LANG_FLOAT: + return "float"; + case DOUBLE: + case JAVA_LANG_DOUBLE: + return "double"; + case DECIMAL: + return "decimal"; + case INT: + case INTEGER: + return "int"; + case TIMESTAMP: + return "timestamp"; + default: + return "varchar"; + } + } +} + + +``` + + +HiveDriver +```java + +public class HiveDriver extends AbstractJdbcDriver implements Driver { + // 获取表的信息 + @Override + public Table getTable(String schemaName, String tableName) { + List tables = listTables(schemaName); + Table table = null; + for (Table item : tables) { + if (Asserts.isEquals(item.getName(), tableName)) { + table = item; + break; + } + } + if (Asserts.isNotNull(table)) { + table.setColumns(listColumns(schemaName, table.getName())); + } + return table; + } + + +// 根据库名称获取表的信息 + @Override + public List
listTables(String schemaName) { + List
tableList = new ArrayList<>(); + PreparedStatement preparedStatement = null; + ResultSet results = null; + IDBQuery dbQuery = getDBQuery(); + String sql = dbQuery.tablesSql(schemaName); + try { + //此步骤是为了切换数据库 与其他数据源有所区别 + execute(String.format(HiveConstant.USE_DB, schemaName)); + preparedStatement = conn.prepareStatement(sql); + results = preparedStatement.executeQuery(); + ResultSetMetaData metaData = results.getMetaData(); + List columnList = new ArrayList<>(); + for (int i = 1; i <= metaData.getColumnCount(); i++) { + columnList.add(metaData.getColumnLabel(i)); + } + while (results.next()) { + String tableName = results.getString(dbQuery.tableName()); + if (Asserts.isNotNullString(tableName)) { + Table tableInfo = new Table(); + tableInfo.setName(tableName); + if (columnList.contains(dbQuery.tableComment())) { + tableInfo.setComment(results.getString(dbQuery.tableComment())); + } + tableInfo.setSchema(schemaName); + if (columnList.contains(dbQuery.tableType())) { + tableInfo.setType(results.getString(dbQuery.tableType())); + } + if (columnList.contains(dbQuery.catalogName())) { + tableInfo.setCatalog(results.getString(dbQuery.catalogName())); + } + if (columnList.contains(dbQuery.engine())) { + tableInfo.setEngine(results.getString(dbQuery.engine())); + } + tableList.add(tableInfo); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + close(preparedStatement, results); + } + return tableList; + } + + //获取所有数据库 和 库下所有表 + @Override + public List getSchemasAndTables() { + return listSchemas(); + } + + //获取所有数据库 + @Override + public List listSchemas() { + + List schemas = new ArrayList<>(); + PreparedStatement preparedStatement = null; + ResultSet results = null; + String schemasSql = getDBQuery().schemaAllSql(); + try { + preparedStatement = conn.prepareStatement(schemasSql); + results = preparedStatement.executeQuery(); + while (results.next()) { + String schemaName = results.getString(getDBQuery().schemaName()); + if (Asserts.isNotNullString(schemaName)) { + Schema schema = new Schema(schemaName); + if (execute(String.format(HiveConstant.USE_DB, schemaName))) { + // 获取库下的所有表 存储到schema中 + schema.setTables(listTables(schema.getName())); + } + schemas.add(schema); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + close(preparedStatement, results); + } + return schemas; + } + + // 根据库名表名获取表的列信息 + @Override + public List listColumns(String schemaName, String tableName) { + List columns = new ArrayList<>(); + PreparedStatement preparedStatement = null; + ResultSet results = null; + IDBQuery dbQuery = getDBQuery(); + String tableFieldsSql = dbQuery.columnsSql(schemaName, tableName); + try { + preparedStatement = conn.prepareStatement(tableFieldsSql); + results = preparedStatement.executeQuery(); + ResultSetMetaData metaData = results.getMetaData(); + List columnList = new ArrayList<>(); + for (int i = 1; i <= metaData.getColumnCount(); i++) { + columnList.add(metaData.getColumnLabel(i)); + } + Integer positionId = 1; + while (results.next()) { + Column field = new Column(); + if (StringUtils.isEmpty(results.getString(dbQuery.columnName()))) { + break; + } else { + if (columnList.contains(dbQuery.columnName())) { + String columnName = results.getString(dbQuery.columnName()); + field.setName(columnName); + } + if (columnList.contains(dbQuery.columnType())) { + field.setType(results.getString(dbQuery.columnType())); + } + if (columnList.contains(dbQuery.columnComment()) && Asserts.isNotNull(results.getString(dbQuery.columnComment()))) { + String columnComment = results.getString(dbQuery.columnComment()).replaceAll("\"|'", ""); + field.setComment(columnComment); + } + field.setPosition(positionId++); + field.setJavaType(getTypeConvert().convert(field)); + } + columns.add(field); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + close(preparedStatement, results); + } + return columns; + } + + //获取建表的SQL + @Override + public String getCreateTableSql(Table table) { + StringBuilder createTable = new StringBuilder(); + PreparedStatement preparedStatement = null; + ResultSet results = null; + String createTableSql = getDBQuery().createTableSql(table.getSchema(), table.getName()); + try { + preparedStatement = conn.prepareStatement(createTableSql); + results = preparedStatement.executeQuery(); + while (results.next()) { + createTable.append(results.getString(getDBQuery().createTableName())).append("\n"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + close(preparedStatement, results); + } + return createTable.toString(); + } + + @Override + public int executeUpdate(String sql) throws Exception { + Asserts.checkNullString(sql, "Sql 语句为空"); + String querySQL = sql.trim().replaceAll(";$", ""); + int res = 0; + try (Statement statement = conn.createStatement()) { + res = statement.executeUpdate(querySQL); + } + return res; + } + + @Override + public JdbcSelectResult query(String sql, Integer limit) { + if (Asserts.isNull(limit)) { + limit = 100; + } + JdbcSelectResult result = new JdbcSelectResult(); + List> datas = new ArrayList<>(); + List columns = new ArrayList<>(); + List columnNameList = new ArrayList<>(); + PreparedStatement preparedStatement = null; + ResultSet results = null; + int count = 0; + try { + String querySQL = sql.trim().replaceAll(";$", ""); + preparedStatement = conn.prepareStatement(querySQL); + results = preparedStatement.executeQuery(); + if (Asserts.isNull(results)) { + result.setSuccess(true); + close(preparedStatement, results); + return result; + } + ResultSetMetaData metaData = results.getMetaData(); + for (int i = 1; i <= metaData.getColumnCount(); i++) { + columnNameList.add(metaData.getColumnLabel(i)); + Column column = new Column(); + column.setName(metaData.getColumnLabel(i)); + column.setType(metaData.getColumnTypeName(i)); + column.setAutoIncrement(metaData.isAutoIncrement(i)); + column.setNullable(metaData.isNullable(i) == 0 ? false : true); + column.setJavaType(getTypeConvert().convert(column)); + columns.add(column); + } + result.setColumns(columnNameList); + while (results.next()) { + LinkedHashMap data = new LinkedHashMap<>(); + for (int i = 0; i < columns.size(); i++) { + data.put(columns.get(i).getName(), getTypeConvert().convertValue(results, columns.get(i).getName(), columns.get(i).getType())); + } + datas.add(data); + count++; + if (count >= limit) { + break; + } + } + result.setSuccess(true); + } catch (Exception e) { + result.setError(LogUtil.getError(e)); + result.setSuccess(false); + } finally { + close(preparedStatement, results); + result.setRowData(datas); + return result; + } } + + @Override + public IDBQuery getDBQuery() { + return new HiveQuery(); + } + + @Override + public ITypeConvert getTypeConvert() { + return new HiveTypeConvert(); + } + + // 获取驱动类 + @Override + String getDriverClass() { + return "org.apache.hive.jdbc.HiveDriver"; + } + + // 改数据源表的类型 此处必须 + @Override + public String getType() { + return "Hive"; + } + // 改数据源表的名称 此处必须 + @Override + public String getName() { + return "Hive"; + } + + // 映射 Flink 的数据类型 + @Override + public Map getFlinkColumnTypeConversion() { + HashMap map = new HashMap<>(); + map.put("BOOLEAN", "BOOLEAN"); + map.put("TINYINT", "TINYINT"); + map.put("SMALLINT", "SMALLINT"); + map.put("INT", "INT"); + map.put("VARCHAR", "STRING"); + map.put("TEXY", "STRING"); + map.put("INT", "INT"); + map.put("DATETIME", "TIMESTAMP"); + return map; + } +} + + + +``` + + +HiveQuery +```java + + +public class HiveQuery extends AbstractDBQuery { + // 获取所有数据库的查询SQL 需要与 常量类(HiveConstant) 联合使用 + @Override + public String schemaAllSql() { + return HiveConstant.QUERY_ALL_DATABASE; + } + + // 获取库下的所有表的SQL 需要与 常量类(HiveConstant) 联合使用 + @Override + public String tablesSql(String schemaName) { + return HiveConstant.QUERY_ALL_TABLES_BY_SCHEMA; + } + + // 动态构建获取表的所有列的SQL 需要与 常量类(HiveConstant) 联合使用 + @Override + public String columnsSql(String schemaName, String tableName) { + return String.format(HiveConstant.QUERY_TABLE_SCHEMA, schemaName, tableName); + } + + // 获取所有数据库的 result title + @Override + public String schemaName() { + return "database_name"; + } + + // 获取建表语句的 result title + @Override + public String createTableName() { + return "createtab_stmt"; + } + + // 获取所有表的 result title + @Override + public String tableName() { + return "tab_name"; + } + + // 获取表注释的 result title + @Override + public String tableComment() { + return "comment"; + } + + // 获取列名的 result title + @Override + public String columnName() { + return "col_name"; + } + + // 获取列的数据类型的 result title + @Override + public String columnType() { + return "data_type"; + } + + // 获取列注释的 result title + @Override + public String columnComment() { + return "comment"; + } + +} + +``` + +- 以上代码开发完成 在此模块下进行测试 建议使用单元测试进行测试 , 如您 PR , 则测试用例必须提交,同时需要注意敏感信息的处理 + +- 通过仅仅上述的代码可知 Dinky 的代码扩展性极强 , 可根据数据源的特性随时重写父类的方法 , 进而轻松实现扩展 + + + + +- 如果上述过程 测试没有问题 需要整合进入项目中 , 请看以下步骤: +- 打包相关配置 修改如下: + - 在 **dlink-core** 模块的 **pom.xml** 下 , 找到扩展数据源相关的依赖 `放在一起方便管理` 并且新增如下内容: +```xml + + com.dlink + 模块名称 + ${scope.runtime} + +``` + - 在 **dlink** 根下 **pom.xml** 中 ,新增如下内容: +```xml + + com.dlink + 模块名称 + ${project.version} + +``` + + - 在 **dlink-assembly** 模块中 , 找到 ``package.xml`` 路径: **/dlink-assembly/src/main/assembly/package.xml** , 新增如下内容: +```xml + + ${project.parent.basedir}/dlink-metadata/模块名称/target + + lib + + 模块名称-${project.version}.jar + + + ``` + +至此 如您的代码没有问题的话 后端代码扩展就已经完成了 ! + +---- + +## 前端开发 +- **dlink-web** 为 Dinky 的前端模块 +- 扩展数据源相关表单所在路径: `dlink-web/src/pages/DataBase/` + - 修改 `dlink-web/src/pages/DataBase/components/DBForm.tsx` 的 **const data** 中 添加如下: +eg: +```shell + { + type: 'Hive', + }, +``` +如下图: +![extened_datasource_dbform](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/function_expansion/datasource/extened_datasource_dbform.jpg) + +注意: ``此处数据源类型遵照大驼峰命名规则`` + + - 添加数据源logo图片 + - 路径: `dlink-web/public/database/` + - logo 图下载参考: [https://www.iconfont.cn](https://www.iconfont.cn) + - logo 图片存放位置: `dlink-web/public/database` + - 修改 `dlink-web/src/pages/DataBase/DB.ts` , 添加如下: +eg: +```shell + case 'hive': + imageUrl += 'hive.png'; # 需要和添加的图片名称保持一致 + break; +``` +如下图: +![extened_datasource_datasourceform](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/function_expansion/datasource/extened_datasource_datasourceform.jpg) + - 创建数据源相关表单属性在: `dlink-web/src/pages/DataBase/components/DataBaseForm.tsx` 此处无需修改 + +---- + +:::info 说明 +至此 , 基于 Dinky 扩展数据源完成 , 如您也有扩展需求 ,请参照如何 [[Issuse]](../../developer_guide/contribution/issue) 和如何 [[提交 PR]](../../developer_guide/contribution/pull_request) +::: diff --git a/docs/docs/extend/function_expansion/flinkversion.md b/docs/docs/extend/function_expansion/flinkversion.md new file mode 100644 index 0000000000..431e45543d --- /dev/null +++ b/docs/docs/extend/function_expansion/flinkversion.md @@ -0,0 +1,14 @@ +--- +sidebar_position: 1 +id: flinkversion +title: 扩展 Flink 版本 +--- + + + + +## 扩展其他版本的 Flink + +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 diff --git a/docs/zh-CN/extend/integrate.md b/docs/docs/extend/integrate.md similarity index 86% rename from docs/zh-CN/extend/integrate.md rename to docs/docs/extend/integrate.md index 61d6698a97..f60208f3e8 100644 --- a/docs/zh-CN/extend/integrate.md +++ b/docs/docs/extend/integrate.md @@ -1,3 +1,11 @@ +--- +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) diff --git a/docs/docs/extend/practice_guide/_category_.json b/docs/docs/extend/practice_guide/_category_.json new file mode 100644 index 0000000000..1f9f8d8546 --- /dev/null +++ b/docs/docs/extend/practice_guide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "实践指南", + "position": 3 +} diff --git a/docs/zh-CN/practice/aggtable.md b/docs/docs/extend/practice_guide/aggtable.md similarity index 85% rename from docs/zh-CN/practice/aggtable.md rename to docs/docs/extend/practice_guide/aggtable.md index a6c3f40f70..6a4d757bdc 100644 --- a/docs/zh-CN/practice/aggtable.md +++ b/docs/docs/extend/practice_guide/aggtable.md @@ -1,3 +1,11 @@ +--- +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 表的最终数据,发现存在四条结果,且也符合问题的要求。 diff --git a/docs/zh-CN/extend/Flink_CDC_kafka_Multi_source_merger.md b/docs/docs/extend/practice_guide/cdc_kafka_multi_source_merge.md similarity index 88% rename from docs/zh-CN/extend/Flink_CDC_kafka_Multi_source_merger.md rename to docs/docs/extend/practice_guide/cdc_kafka_multi_source_merge.md index 23ff59242d..5fb3cfb80a 100644 --- a/docs/zh-CN/extend/Flink_CDC_kafka_Multi_source_merger.md +++ b/docs/docs/extend/practice_guide/cdc_kafka_multi_source_merge.md @@ -1,3 +1,12 @@ +--- +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 进行了同步来记录操作。 diff --git a/docs/docs/extend/practice_guide/clickhouse.md b/docs/docs/extend/practice_guide/clickhouse.md new file mode 100644 index 0000000000..3222bbaf70 --- /dev/null +++ b/docs/docs/extend/practice_guide/clickhouse.md @@ -0,0 +1,10 @@ +--- +sidebar_position: 7 +id: clickhouse +title: Clickhouse +--- + + + + +敬请期待 \ No newline at end of file diff --git a/docs/docs/extend/practice_guide/dataspherestudio.md b/docs/docs/extend/practice_guide/dataspherestudio.md new file mode 100644 index 0000000000..2dd3e26971 --- /dev/null +++ b/docs/docs/extend/practice_guide/dataspherestudio.md @@ -0,0 +1,10 @@ +--- +sidebar_position: 13 +id: dataspherestudio +title: DataSphere Studio +--- + + + + +## 敬请期待 \ No newline at end of file diff --git a/docs/docs/extend/practice_guide/dolphinscheduler.md b/docs/docs/extend/practice_guide/dolphinscheduler.md new file mode 100644 index 0000000000..48d38b2693 --- /dev/null +++ b/docs/docs/extend/practice_guide/dolphinscheduler.md @@ -0,0 +1,10 @@ +--- +sidebar_position: 12 +id: dolphinscheduler +title: Dolphinscheduler +--- + + + + +## 敬请期待 \ No newline at end of file diff --git a/docs/zh-CN/extend/doris.md b/docs/docs/extend/practice_guide/doris.md similarity index 84% rename from docs/zh-CN/extend/doris.md rename to docs/docs/extend/practice_guide/doris.md index 4df8210853..6a29b4392e 100644 --- a/docs/zh-CN/extend/doris.md +++ b/docs/docs/extend/practice_guide/doris.md @@ -1,3 +1,12 @@ +--- +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 diff --git a/docs/extend/flinkcdc.md b/docs/docs/extend/practice_guide/flinkcdc.md similarity index 66% rename from docs/extend/flinkcdc.md rename to docs/docs/extend/practice_guide/flinkcdc.md index d49c9ead73..11c33227b3 100644 --- a/docs/extend/flinkcdc.md +++ b/docs/docs/extend/practice_guide/flinkcdc.md @@ -1,3 +1,12 @@ +--- +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 diff --git a/docs/zh-CN/extend/hive.md b/docs/docs/extend/practice_guide/hive.md similarity index 98% rename from docs/zh-CN/extend/hive.md rename to docs/docs/extend/practice_guide/hive.md index b1652b31a4..fb01600e89 100644 --- a/docs/zh-CN/extend/hive.md +++ b/docs/docs/extend/practice_guide/hive.md @@ -1,3 +1,11 @@ +--- +sidebar_position: 6 +id: hive +title: Hive +--- + + + ## 前言 最近有很多小伙伴问,Dinky 如何连接 Hive 进行数据开发? diff --git a/docs/zh-CN/extend/hudi.md b/docs/docs/extend/practice_guide/hudi.md similarity index 88% rename from docs/zh-CN/extend/hudi.md rename to docs/docs/extend/practice_guide/hudi.md index c947bfb921..066c0a7490 100644 --- a/docs/zh-CN/extend/hudi.md +++ b/docs/docs/extend/practice_guide/hudi.md @@ -1,3 +1,11 @@ +--- +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 测试结束 diff --git a/docs/docs/extend/practice_guide/iceberg.md b/docs/docs/extend/practice_guide/iceberg.md new file mode 100644 index 0000000000..d869f2d86b --- /dev/null +++ b/docs/docs/extend/practice_guide/iceberg.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 10 +id: iceberg +title: Iceberg +--- + + + +## 敬请期待 \ No newline at end of file diff --git a/docs/docs/extend/practice_guide/kudu.md b/docs/docs/extend/practice_guide/kudu.md new file mode 100644 index 0000000000..a78a1e9c9e --- /dev/null +++ b/docs/docs/extend/practice_guide/kudu.md @@ -0,0 +1,118 @@ +--- +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 +1.13.6 +1.14.0 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + +~~~ + +这里将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 diff --git a/docs/en-US/share/principle.md b/docs/docs/extend/practice_guide/principle.md similarity index 95% rename from docs/en-US/share/principle.md rename to docs/docs/extend/practice_guide/principle.md index 1d88e5b31a..d1d09e53ff 100644 --- a/docs/en-US/share/principle.md +++ b/docs/docs/extend/practice_guide/principle.md @@ -1,3 +1,12 @@ +--- +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 的扩展 diff --git a/docs/zh-CN/extend/udf.md b/docs/docs/extend/practice_guide/udf.md similarity index 76% rename from docs/zh-CN/extend/udf.md rename to docs/docs/extend/practice_guide/udf.md index abb0cf9098..51d6bfee48 100644 --- a/docs/zh-CN/extend/udf.md +++ b/docs/docs/extend/practice_guide/udf.md @@ -1,3 +1,11 @@ +--- +sidebar_position: 11 +id: udf +title: UDF +--- + + + ## 扩展 UDF 将 Flink 集群上已扩展好的 UDF 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 UDF 过程同 Flink 官方一样。 diff --git a/docs/zh-CN/practice/yarnsubmit.md b/docs/docs/extend/practice_guide/yarnsubmit.md similarity index 69% rename from docs/zh-CN/practice/yarnsubmit.md rename to docs/docs/extend/practice_guide/yarnsubmit.md index c81f885a15..7b84935c07 100644 --- a/docs/zh-CN/practice/yarnsubmit.md +++ b/docs/docs/extend/practice_guide/yarnsubmit.md @@ -1,202 +1,206 @@ - - ## Yarn-Session 实践 - - ### 注册 Session 集群 - -![register_session_cluster](http://www.aiwenmo.com/dinky/docs/zh-CN/practice/yarnsubmit/register_session_cluster.png) - - ### 创建 Session 集群 - -进入集群中心进行远程集群的注册。点击新建按钮配置远程集群的参数。图中示例配置了一个 Flink on Yarn 的高可用集群,其中 JobManager HA 地址需要填写集群中所有可能被作为 JobManager 的 RestAPI 地址,多个地址间使用英文逗号分隔。表单提交时可能需要较长时间的等待,因为 dlink 正在努力的计算当前活跃的 JobManager 地址。 - -保存成功后,页面将展示出当前的 JobManager 地址以及被注册集群的版本号,状态为正常时表示可用。 - -注意:只有具备 JobManager 实例的 Flink 集群才可以被成功注册到 dlink 中。( Yarn-Per-Job 和 Yarn-Application 也具有 JobManager,当然也可以手动注册,但无法提交任务) - -如状态异常时,请检查被注册的 Flink 集群地址是否能正常访问,默认端口号为8081,可能更改配置后发生了变化,查看位置为 Flink Web 的 JobManager 的 Configuration 中的 rest 相关属性。 - -### 执行 Hello World - -万物都具有 Hello World 的第一步,当然 Dinky 也是具有的。我们选取了基于 datagen 的流查询作为第一行 Flink Sql。具体如下: - -```sql -CREATE TABLE Orders ( - order_number BIGINT, - price DECIMAL(32,2), - buyer ROW, - order_time TIMESTAMP(3) -) WITH ( - 'connector' = 'datagen', - 'rows-per-second' = '1' -); -select order_number,price,order_time from Orders -``` - -该例子使用到了 datagen,需要在 dlink 的 plugins 目录下添加 flink-table.jar。 - -点击 **数据开发** 进入开发页面: - -![data_devops](http://www.aiwenmo.com/dinky/docs/zh-CN/practice/yarnsubmit/data_devops.png) - -在中央的编辑器中编辑 Flink Sql。 - -右边作业配置: - -1. 执行模式:选中 Yarn-session; -2. Flink 集群:选中上文注册的测试集群; -3. SavePoint 策略:选中禁用; -4. 按需进行其他配置。 - -右边执行配置: - -1. 预览结果:启用; -2. 远程执行:启用。 - -点击快捷操作栏的三角号按钮同步执行该 FlinkSQL 任务。 - -### 预览数据 - -![data_devops_showdata](http://www.aiwenmo.com/dinky/docs/zh-CN/practice/yarnsubmit/data_devops_showdata.png) - -切换到历史选项卡点击刷新可以查看提交进度。切换到结果选项卡,等待片刻点击获取最新数据即可预览 SELECT。 - -### 停止任务 - -![data_devops_showprocess](http://www.aiwenmo.com/dinky/docs/zh-CN/practice/yarnsubmit/data_devops_showprocess.png) - -切换到进程选项卡,选则对应的集群实例,查询当前任务,可执行停止操作。 - -## Yarn-Per-Job 实践 - -### 注册集群配置 - -进入集群中心——集群配置,注册配置。 - -![create_cluster_settiong](http://www.aiwenmo.com/dinky/docs/zh-CN/practice/yarnsubmit/create_cluster_settiong.png) - -1. Hadoop 配置文件路径:指定配置文件路径(末尾无/),需要包含以下文件:core-site.xml,hdfs-site.xml,yarn-site.xml; -2. Flink 配置 lib 路径:指定 lib 的 hdfs 路径(末尾无/),需要包含 Flink 运行时的所有依赖,即 flink 的 lib 目录下的所有 jar; -3. Flink 配置文件路径:指定配置文件 flink-conf.yaml 的具体路径(末尾无/); -4. 按需配置其他参数(重写效果); -5. 配置基本信息(标识、名称等); -6. 点击测试或者保存。 - -### 执行升级版 Hello World - -之前的 hello world 是个 SELECT 任务,改良下变为 INSERT 任务: - -```sql -CREATE TABLE Orders ( - order_number INT, - price DECIMAL(32,2), - order_time TIMESTAMP(3) -) WITH ( - 'connector' = 'datagen', - 'rows-per-second' = '1', - 'fields.order_number.kind' = 'sequence', - 'fields.order_number.start' = '1', - 'fields.order_number.end' = '1000' -); -CREATE TABLE pt ( -ordertotal INT, -numtotal INT -) WITH ( - 'connector' = 'print' -); -insert into pt select 1 as ordertotal ,sum(order_number)*2 as numtotal from Orders -``` - -![image-20211128232734409](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6HU0ics1Er4CibiaRc8jndmc3rHX9J3ArSp4QF2qyARR46hPzOh0kDbYYQ/0?wx_fmt=png) - -编写 Flink SQL; - -作业配置: - -1. 执行模式:选中 yarn-per-job ; -2. Flink 集群配置:选中刚刚注册的配置; -3. SavePoint 策略:选中最近一次。 - -快捷操作栏: - -1. 点击保存按钮保存当前所有配置; -2. 点击小火箭异步提交作业。 - -![image-20211128233423276](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6OsQDhibZQbh1nXrx9d0OBiaiaibnIMnLcSfT3MNxhY9CEyAxrA9NLczohA/0?wx_fmt=png) - -注意,执行历史需要手动刷新。 - -### 自动注册集群 - -点击集群中心——集群实例,即可发现自动注册的 Per-Job 集群。 - -![image-20211128234056101](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6zCpJ7Knv1WYHTUxHt8iagpNNjRAPsPiaqBoD2xkLupcM7Op1Q48tb6ibQ/0?wx_fmt=png) - -### 查看 Flink Web UI - -提交成功后,点击历史的蓝色地址即可快速打开 Flink Web UI地址。 - -![image-20211128233735071](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6AQq5qVMAkwUM8WiaLnTrzDnSlLicTJZjWxowdW9dKUibNp33nrnHpL2Ng/0?wx_fmt=png) - -### 从 Savepoint 处停止 - -在进程选项卡中选择自动注册的 Per-Job 集群,查看任务并 SavePoint-Cancel。 - -![image-20211128234321656](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6jDvzsoHias24jAY6ElCFj6lFCX1jjdGmoGGa5vI5xgNSEUzyEiaZEZNA/0?wx_fmt=png) - -在右侧保存点选项卡可以查看该任务的所有 SavePoint 记录。 - -![image-20211128234619397](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6TGv1Gun2rB35Upv8hnsoeHzeDdFT4Ryag8icHz7BrzhE4YELiaMk7KYw/0?wx_fmt=png) - -### 从 SavePoint 处启动 - -再次点击小火箭提交任务。 - -![image-20211128235430989](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6WTchGqUeBiaNY5hT6tjQ611UaQA3jawOS4uQHrN65icia3d4qLAfZMEibg/0?wx_fmt=png) - -查看对应 Flink Web UI,从 Stdout 输出中证实 SavePoint 恢复成功。 - -## Yarn-Application 实践 - -### 注册集群配置 - -使用之前注册的集群配置即可。 - -### 上传 dlink-app.jar - -第一次使用时,需要将 dlink-app.jar 上传到 hdfs 指定目录,目录可修改如下: - -![image-20211128235914006](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6loq9rmu2tlkDvgSoD6WSlNBrniabV7MibNtSQrA2wKnCjKOzUGGiawW4g/0?wx_fmt=png) - -50070 端口 浏览文件系统如下: - -![image-20211129000047789](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X68kEAFYLBQpGcamP5djEaj9LiaLqlQCxVIXrbdFbgCb4Ct25HTAHCRIw/0?wx_fmt=png) - -### 执行升级版 Hello World - -作业配置: - -1. 执行模式:选中 yarn-application ; - -快捷操作栏: - -1. 点击保存按钮保存当前所有配置; -2. 点击小火箭异步提交作业。 - -### 其他同 Per-Job - -其他操作同 yarn-per-job ,本文不再做描述。 - -### 提交 User Jar - -作业中心—— Jar 管理,注册 User Jar 配置。 - -![image-20211129000804888](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6lGkXGSXSP9JyWTxc5rrh8zD9y5XYR9HkKxRRDicbUQicSFhaAAR0Ulxw/0?wx_fmt=png) - -右边作业配置的可执行 Jar 选择刚刚注册的 Jar 配置,保存后点击小火箭提交作业。 - -![image-20211129000933320](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6qyajpuR1OPlsFynwibdSRX3ECcRGGJPmutqyaibJbFS8HYCYic0rswuiaw/0?wx_fmt=png) - -由于提交了个批作业,Yarn 可以发现已经执行完成并销毁集群了。 - -![image-20211129001241101](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6UJbUIgHTSJHN29zicKuf761ERGnZHibMMURhuFpL2Iiah9LSiceTXIrAyg/0?wx_fmt=png) - +--- +sidebar_position: 1 +id: yarnsubmit +title: Yarn提交实践指南 +--- + + + + ## Yarn-Session 实践 + + ### 注册 Session 集群 + +![register_session_cluster](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit//register_session_cluster.png) + + ### 创建 Session 集群 + +进入集群中心进行远程集群的注册。点击新建按钮配置远程集群的参数。图中示例配置了一个 Flink on Yarn 的高可用集群,其中 JobManager HA 地址需要填写集群中所有可能被作为 JobManager 的 RestAPI 地址,多个地址间使用英文逗号分隔。表单提交时可能需要较长时间的等待,因为 dlink 正在努力的计算当前活跃的 JobManager 地址。 + +保存成功后,页面将展示出当前的 JobManager 地址以及被注册集群的版本号,状态为正常时表示可用。 + +注意:只有具备 JobManager 实例的 Flink 集群才可以被成功注册到 dlink 中。( Yarn-Per-Job 和 Yarn-Application 也具有 JobManager,当然也可以手动注册,但无法提交任务) + +如状态异常时,请检查被注册的 Flink 集群地址是否能正常访问,默认端口号为8081,可能更改配置后发生了变化,查看位置为 Flink Web 的 JobManager 的 Configuration 中的 rest 相关属性。 + +### 执行 Hello World + +万物都具有 Hello World 的第一步,当然 Dinky 也是具有的。我们选取了基于 datagen 的流查询作为第一行 Flink Sql。具体如下: + +```sql +CREATE TABLE Orders ( + order_number BIGINT, + price DECIMAL(32,2), + buyer ROW, + order_time TIMESTAMP(3) +) WITH ( + 'connector' = 'datagen', + 'rows-per-second' = '1' +); +select order_number,price,order_time from Orders +``` + +该例子使用到了 datagen,需要在 dlink 的 plugins 目录下添加 flink-table.jar。 + +点击 **数据开发** 进入开发页面: + +![data_devops](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/data_devops.png) + +在中央的编辑器中编辑 Flink Sql。 + +右边作业配置: + +1. 执行模式:选中 Yarn-session; +2. Flink 集群:选中上文注册的测试集群; +3. SavePoint 策略:选中禁用; +4. 按需进行其他配置。 + +右边执行配置: + +1. 预览结果:启用; +2. 远程执行:启用。 + +点击快捷操作栏的三角号按钮同步执行该 FlinkSQL 任务。 + +### 预览数据 + +![data_devops_showdata](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/data_devops_showdata.png) + +切换到历史选项卡点击刷新可以查看提交进度。切换到结果选项卡,等待片刻点击获取最新数据即可预览 SELECT。 + +### 停止任务 + +![data_devops_showprocess](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/data_devops_showprocess.png) + +切换到进程选项卡,选则对应的集群实例,查询当前任务,可执行停止操作。 + +## Yarn-Per-Job 实践 + +### 注册集群配置 + +进入集群中心——集群配置,注册配置。 + +![create_cluster_settiong](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/create_cluster_settiong.png) + +1. Hadoop 配置文件路径:指定配置文件路径(末尾无/),需要包含以下文件:core-site.xml,hdfs-site.xml,yarn-site.xml; +2. Flink 配置 lib 路径:指定 lib 的 hdfs 路径(末尾无/),需要包含 Flink 运行时的所有依赖,即 flink 的 lib 目录下的所有 jar; +3. Flink 配置文件路径:指定配置文件 flink-conf.yaml 的具体路径(末尾无/); +4. 按需配置其他参数(重写效果); +5. 配置基本信息(标识、名称等); +6. 点击测试或者保存。 + +### 执行升级版 Hello World + +之前的 hello world 是个 SELECT 任务,改良下变为 INSERT 任务: + +```sql +CREATE TABLE Orders ( + order_number INT, + price DECIMAL(32,2), + order_time TIMESTAMP(3) +) WITH ( + 'connector' = 'datagen', + 'rows-per-second' = '1', + 'fields.order_number.kind' = 'sequence', + 'fields.order_number.start' = '1', + 'fields.order_number.end' = '1000' +); +CREATE TABLE pt ( +ordertotal INT, +numtotal INT +) WITH ( + 'connector' = 'print' +); +insert into pt select 1 as ordertotal ,sum(order_number)*2 as numtotal from Orders +``` + +![create_sql](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/create_sql.png) + +编写 Flink SQL; + +作业配置: + +1. 执行模式:选中 yarn-per-job ; +2. Flink 集群配置:选中刚刚注册的配置; +3. SavePoint 策略:选中最近一次。 + +快捷操作栏: + +1. 点击保存按钮保存当前所有配置; +2. 点击小火箭异步提交作业。 + +![async_submit_job](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/async_submit_job.png) + +注意,执行历史需要手动刷新。 + +### 自动注册集群 + +点击集群中心——集群实例,即可发现自动注册的 Per-Job 集群。 + +![cluster_instance](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/cluster_instance.png) + +### 查看 Flink Web UI + +提交成功后,点击历史的蓝色地址即可快速打开 Flink Web UI地址。 + +![flink_webui](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/flink_webui.png) + +### 从 Savepoint 处停止 + +在进程选项卡中选择自动注册的 Per-Job 集群,查看任务并 SavePoint-Cancel。 + +![begin_savepoint_stop](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/begin_savepoint_stop.png) + +在右侧保存点选项卡可以查看该任务的所有 SavePoint 记录。 + +![show_job_status](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/show_job_status.png) +### 从 SavePoint 处启动 + +再次点击小火箭提交任务。 + +![flink_webui_show_data](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/flink_webui_show_data.png) +查看对应 Flink Web UI,从 Stdout 输出中证实 SavePoint 恢复成功。 + +## Yarn-Application 实践 + +### 注册集群配置 + +使用之前注册的集群配置即可。 + +### 上传 dlink-app.jar + +第一次使用时,需要将 dlink-app.jar 上传到 hdfs 指定目录,目录可修改如下: + +![upload_app_jar](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/upload_app_jar.png) + +50070 端口 浏览文件系统如下: + +![hdfs_app_jar](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/hdfs_app_jar.png) + +### 执行升级版 Hello World + +作业配置: + +1. 执行模式:选中 yarn-application ; + +快捷操作栏: + +1. 点击保存按钮保存当前所有配置; +2. 点击小火箭异步提交作业。 + +### 其他同 Per-Job + +其他操作同 yarn-per-job ,本文不再做描述。 + +### 提交 User Jar + +作业中心—— Jar 管理,注册 User Jar 配置。 + +![weihu_jar](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/weihu_jar.png) + +右边作业配置的可执行 Jar 选择刚刚注册的 Jar 配置,保存后点击小火箭提交作业。 + +![execution_history](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/execution_history.png) + +由于提交了个批作业,Yarn 可以发现已经执行完成并销毁集群了。 + +![yarn_job_destory](http://www.aiwenmo.com/dinky/docs/zh-CN/extend/practice_guide/yarnsubmit/yarn_job_destory.png) diff --git a/docs/docs/faq.md b/docs/docs/faq.md new file mode 100644 index 0000000000..87466e646f --- /dev/null +++ b/docs/docs/faq.md @@ -0,0 +1,119 @@ +--- +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 仓库 + + + cloudera + https://repository.cloudera.com/artifactory/cloudera-repos/ + Cloudera Repositories + + true + + + false + + + +# 以flink-sql-connector-hive-2.2.0,修改如下 + + org.apache.hive + hive-exec + 2.1.1-cdh6.3.2 + + + log4j + log4j + + + org.slf4j + slf4j-log4j12 + + + org.pentaho + pentaho-aggdesigner-algorithm + + + + ``` + + 编译成功后,将对应的jar包拿出来即可,分别放到 flink/lib和dinky/plugins下。重启 Flink 和 Dlinky 即可。 + diff --git a/docs/zh-CN/feature.md b/docs/docs/feature.md similarity index 98% rename from docs/zh-CN/feature.md rename to docs/docs/feature.md index 1dd732605b..41f6b31494 100644 --- a/docs/zh-CN/feature.md +++ b/docs/docs/feature.md @@ -1,3 +1,9 @@ +--- +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 | diff --git a/docs/zh-CN/introduce.md b/docs/docs/intro.md similarity index 98% rename from docs/zh-CN/introduce.md rename to docs/docs/intro.md index 0a261bb40b..eda12ad137 100644 --- a/docs/zh-CN/introduce.md +++ b/docs/docs/intro.md @@ -1,3 +1,8 @@ +--- +sidebar_position: 1 +title: Dinky 简介 +--- + ## 介绍 实时即未来,Dlink 为 Apache Flink 而生,让 Flink SQL 纵享丝滑,并致力于实时计算平台建设。 diff --git a/docs/docs/operation_guide/_category_.json b/docs/docs/operation_guide/_category_.json new file mode 100644 index 0000000000..3362756dee --- /dev/null +++ b/docs/docs/operation_guide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "操作指南", + "position": 7 +} diff --git a/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/job_debug.md b/docs/docs/operation_guide/job_debug.md similarity index 92% rename from docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/job_debug.md rename to docs/docs/operation_guide/job_debug.md index 99ae009ab2..cef6dcb621 100644 --- a/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/job_debug.md +++ b/docs/docs/operation_guide/job_debug.md @@ -1,4 +1,13 @@ -可以选择使用 Standalone 或 Session 集群在开发测试环境对作业调试,如作业运行、检查结果等。配置 Standalone 或 Session 集群请参考注册中心中[集群管理](docs/zh-CN/administrator-guide/registerCenter/cluster_manage.md)的集群实例管理。 +--- +sidebar_position: 4 +id: job_debug +title: 作业调试 +--- + + + + +可以选择使用 Standalone 或 Session 集群在开发测试环境对作业调试,如作业运行、检查结果等。配置 Standalone 或 Session 集群请参考注册中心中[集群管理](../administrator_guide/register_center/cluster_manage)的集群实例管理。 也可以调试普通的 DB SQL 作业。 diff --git a/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_dev.md b/docs/docs/operation_guide/job_dev.md similarity index 76% rename from docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_dev.md rename to docs/docs/operation_guide/job_dev.md index c9493912b7..a8f185bfde 100644 --- a/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_dev.md +++ b/docs/docs/operation_guide/job_dev.md @@ -1,8 +1,16 @@ -## 说明 +--- +sidebar_position: 2 +id: job_dev +title: 作业开发 +--- -- SQL 编辑器编辑的 FlinkSQL 作业,当前仅支持 Flink1.11、Flink1.12、Flink1.13、Flink1.14 版本的语法。 -- FlinkSQL 支持的上下游存储,请参考 [上下游存储]() + + +:::tip 说明 + + SQL 编辑器编辑的 FlinkSQL 作业,当前仅支持 Flink1.11、Flink1.12、Flink1.13、Flink1.14 版本的语法。 +::: ## FlinkSQL 操作步骤 @@ -10,7 +18,7 @@ 2.在左侧菜单栏,右键 **目录** -3.新建目录或作业,请参考作业运维中的 **[作业管理](/zh-CN/administrator_guide/studio/job_devops/job_manage.md)** +3.新建目录或作业 4.在新建文件的对话框,填写作业信息 @@ -41,8 +49,8 @@ CREATE TABLE blackhole_sink( --将源表数据插入到结果表 INSERT INTO blackhole_sink SELECT - id BIGINT, - name STRING + id , + name from datagen_source; ``` @@ -54,20 +62,22 @@ from datagen_source; | 类型 | 配置项 | 备注 | |:----:|:-------------|:-------------------------------------------------------------------------------------------------------------------------| -| 作业配置 | 执行模式 | 区别请参考:[作业托管概述](/zh-CN/administrator_guide/studio/job_dev/job_hosting.md) | -| 作业配置 | 集群实例 | Standalone 和 Session 执行模式需要选择集群实例,请参考:[集群实例管理](/zh-CN/administrator_guide/register_center/cluster_manage?id=集群实例管理) | -| 作业配置 | 集群配置 | Per-Job 和 Application 执行模式需要选择集群配置,请参考:[集群配置管理](/zh-CN/administrator_guide/register_center/cluster_manage?id=集群配置管理) | +| 作业配置 | 执行模式 | 区别详见用户手册数据开发中的[作业概述](../administrator_guide/studio/job_hosting) | +| 作业配置 | 集群实例 | Standalone 和 Session 执行模式需要选择集群实例,详见[集群实例管理](../administrator_guide/register_center/cluster_manage#集群实例管理) | +| 作业配置 | 集群配置 | Per-Job 和 Application 执行模式需要选择集群配置,详见[集群配置管理](../administrator_guide/register_center/cluster_manage#集群配置管理) | | 作业配置 | FlinkSQL 环境 | 选择已创建的 FlinkSQLEnv,如果没有则不选 | | 作业配置 | 任务并行度 | 指定作业级任务并行度,默认为 1 | | 作业配置 | Insert 语句集 | 默认禁用,开启后将 SQL编辑器中编写的多个 Insert 语句合并为一个 JobGraph 进行提交 | | 作业配置 | 全局变量 | 默认禁用,开启后可以使用数据源连接配置变量、自定义变量等 | | 作业配置 | 批模式 | 默认禁用,开启后启用 Batch Mode | | 作业配置 | SavePoint 策略 | 默认禁用,策略包括:
**最近一次**
**最早一次**
**指定一次** | -| 作业配置 | 报警组 | 报警组配置请参考[告警管理](docs/zh-CN/administrator-guide/registerCenter/warning.md) | +| 作业配置 | 报警组 | 报警组配置详见[报警管理](../administrator_guide/register_center/warning) | | 作业配置 | 其他配置 | 其他的 Flink 作业配置,具体可选参数,请参考 [Flink 官网](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/config/) | 作业配置如下图: ![job_config](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_dev/job_config.png) -**注意:** 请及时手动保存作业信息,以免丢失 \ No newline at end of file +:::warning 注意事项 + 请及时手动保存作业信息,以免丢失 +::: \ No newline at end of file diff --git a/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_submit.md b/docs/docs/operation_guide/job_submit.md similarity index 91% rename from docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_submit.md rename to docs/docs/operation_guide/job_submit.md index 7e21899214..970592726a 100644 --- a/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_submit.md +++ b/docs/docs/operation_guide/job_submit.md @@ -1,3 +1,12 @@ +--- +sidebar_position: 3 +id: job_submit +title: 作业提交 +--- + + + + ## 功能说明 - **执行当前的 SQL:** 提交执行未保存的作业配置,并可以同步获取 SELECT、SHOW 等执行结果,常用于 Local、Standalone、Session 执行模式; @@ -34,4 +43,6 @@ ![online](http://www.aiwenmo.com/dinky/docs/zh-CN/administrator_guide/studio/job_dev/flinksql_guide/flinksql_job_submit/online.png) -有关发布上线的详细内容,请参考运维中心 +:::info 信息 +有关发布上线的详细内容,详见用户手册的运维中心 +::: \ No newline at end of file diff --git a/docs/docs/operation_guide/summary.md b/docs/docs/operation_guide/summary.md new file mode 100644 index 0000000000..3528ea9b15 --- /dev/null +++ b/docs/docs/operation_guide/summary.md @@ -0,0 +1,14 @@ +--- +sidebar_position: 1 +id: summary +title: 概述 +--- + + + + +Dinky 数据开发控制台为您提供作业开发、作业提交、作业调试等功能。 +FlinkSQL 开发指南主要包含以下内容: + - [作业开发](./job_dev) + - [作业提交](./job_submit) + - [作业调试](./job_debug) \ No newline at end of file diff --git a/docs/docs/overview.md b/docs/docs/overview.md new file mode 100644 index 0000000000..3bbefe6dff --- /dev/null +++ b/docs/docs/overview.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 5 +id: overview +title: Dinky 概览 +--- + + +## 概述 + +Dinky 作为 [Apache Flink](https://github.com/apache/flink) 的 FlinkSQL 的实时计算平台,具有以下核心特点。 + +- **支持 Flink 原生语法、连接器、UDF 等:** 几乎零成本将 Flink 作业迁移至 Dinky。 +- **增强 FlinkSQL 语法:** 表值聚合函数、全局变量、CDC多源合并、执行环境、语句合并、共享会话等。 +- **支持 Flink 多版本:** 支持作为多版本 FlinkSQL Server 的能力以及 OpenApi。 +- **支持外部数据源的 DB SQL 操作:** 如 ClickHouse、Doris、Hive、Mysql、Oracle、Phoenix、PostgreSql、SqlServer 等。 +- **支持实时任务运维:** 作业上线下线、作业信息、集群信息、作业快照、异常信息、作业日志、数据地图、即席查询、历史版本、报警记录等。 + + +## 管理控制台介绍 + +Dinky 实时计算平台开发模块包括 **数据开发**、**运维中心**、**注册中心** 和 **系统设置** 四大模块。 + +### 数据开发 + +数据开发包括作业管理、作业配置和运维管理等 + +![data_ops](http://www.aiwenmo.com/dinky/docs/zh-CN/overview/data_ops.png) + +### 运维中心 + +![devops_center](http://www.aiwenmo.com/dinky/docs/zh-CN/overview/devops_center.png) + +### 注册中心 + +注册中心包括集群管理、Jar管理、数据源管理、报警管理和文档管理 + +![register_center](http://www.aiwenmo.com/dinky/docs/zh-CN/overview/register_center.png) + +### 系统设置 + +系统设置包括用户管理和Flink设置 + +![system_settings](http://www.aiwenmo.com/dinky/docs/zh-CN/overview/system_settings.png) diff --git a/docs/docs/plans.md b/docs/docs/plans.md new file mode 100644 index 0000000000..477ea0ba2b --- /dev/null +++ b/docs/docs/plans.md @@ -0,0 +1,11 @@ +--- +sidebar_position: 15 +id: plans +title: 近期计划 +--- +* [ ] 多租户及命名空间 +* [ ] 统一元数据管理 +* [ ] 全局血缘与影响分析 +* [ ] Flink 元数据持久化 +* [ ] 多版本 Flink-Client Server +* [X] 整库千表同步 diff --git a/docs/docs/quick_start/_category_.json b/docs/docs/quick_start/_category_.json new file mode 100644 index 0000000000..637321b268 --- /dev/null +++ b/docs/docs/quick_start/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "快速入门", + "position": 6 +} diff --git a/docs/docs/quick_start/dbql_quick_start.md b/docs/docs/quick_start/dbql_quick_start.md new file mode 100644 index 0000000000..5bd3ad44c0 --- /dev/null +++ b/docs/docs/quick_start/dbql_quick_start.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 2 +id: dbql_quick_start +title: DB SQL 作业快速入门 +--- + +## 零基础上手 + + Dinky 当前支持的外部数据源详见[扩展数据源](./extend/function_expansion/datasource.md) + +### 创建数据源 + +选择**注册中心>>数据源管理>>新建**,假设您连接Starrocks。 + +![createSource](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/createSource.png) + +![createSource1](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/createSource1.png) + +![createSource2](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/createSource2.png) + +测试创建成功后,显示如下 + +![createSourceList](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/createSourceList.png) + +### 创建作业 + +点击**数据开发>>目录>>右键**,出现创建作业菜单。作业类型选择**Doris** + +![createdsjob](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/createdsjob.png) + +### 作业配置 + +作业创建完成后,在最右侧会出现数据源,选择连接的**数据源** + +![sourcellink](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/sourcellink.png) + +### ETL 作业编写 + +外部数据源可以创建 DDL、DML语句对其进行ETL开发。 + +![ETL](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/ETL.png) + +### 作业提交运行 + +当 ETL 开发结束 或者做即席查询时,可以点击**保存>>语法检查>>运行当前的SQL** 将 SQL 提交。 + +![runjob](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/dbql_quick_start/runjob.png) + diff --git a/docs/docs/quick_start/flinksql_quick_start.md b/docs/docs/quick_start/flinksql_quick_start.md new file mode 100644 index 0000000000..e94c82a855 --- /dev/null +++ b/docs/docs/quick_start/flinksql_quick_start.md @@ -0,0 +1,152 @@ +--- +sidebar_position: 1 +id: flinksql_quick_start +title: Flink SQL 作业快速入门 +--- + + + +## 零基础上手 + + Dinky 是基于 Flink 的流批一体化数据汇聚、数据同步的实时计算平台,通过阅读本文档,您将可以零基础上手实时计算平台 Dinky 。 + +### 创建集群配置或集群实例 + +首先,登录 Dlinky,选择**注册中心>>集群管理>>集群实例管理或集群配置管理**,点击**新建** Flink 集群 + +![](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4.png) + +:::info 说明 + + 集群实例管理或集群配置管理添加集群步骤相同 + + 集群实例管理或集群配置管理可通过**数据开发>>快捷引导** 进行集群创建 + +::: + +### 创建作业 + +选择**数据开发>>目录**,首先点击**创建目录**,点击创建好的目录右键即可创建作业 + +![image-20220625124837416](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/image-20220625124837416.png) + + + +## 创建集群 + +### 集群实例 + +Dinky 推荐您在使用 Yarn Session、K8s Session、StandAlone 采用集群实例的方式注册集群。 + +**操作步骤** + +1.可通过数据开发中的快捷引导**注册集群实例**。或者通过**注册中心中的集群管理**注册集群实例。 + +2.添加 Flink 集群 + +![image-20220625130448549](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/image-20220625130448549.png) + +集群实例创建完成后,会显示在列表。 + +![cluserInstanceList](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/cluserInstanceList.png) + + + +### 集群配置 + +Dinky 推荐您在使用 Yarn Per Job、Yarn Application、K8s Application 采用集群配置的方式注册集群。 + +**操作步骤** + +1.可通过数据开发中的快捷引导**注册集群配置**。或者通过**注册中心中的集群管理**注册集群配置。 + +2.添加集群配置 + +![cluseterConfig1](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/cluseterConfig1.png) + +![cluseterConfig2](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/cluseterConfig2.png) + + + + 集群配置创建完成后,会显示在列表。 + +![cluseterConfigList](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/cluseterConfigList.png) + + + +先关集群管理的说明,详见**用户手册中注册中心的[集群管理](./administrator_guide/register_center/cluster_manage.md)** + +## 作业开发 + +创建集群完成后,就可进一步开发 FlinkSQL 作业 + +### 脚本准备 + +脚本选用 Flink 官网提供的 SQL 脚本,参考链接如下: + +``` +https://github.com/ververica/flink-sql-cookbook +#下载 flink-faker 放入$FLINK_HOME/lib下及Dlinky的plugins下 +https://github.com/knaufk/flink-faker/releases +``` + + + +### FlinkSQL 作业创建 + +下面创建一个作业名称为**"test66"**的作业 + +![createJob](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/createJob.png) + +创建完成后,即可在**"test66"**作业下写 SQL 及 配置作业参数 + +![createJob2](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/createJob2.png) + + + +### FlinkSQL 语句编写 + +FlinkSQL 作业编写,分为三部分内容,分别是** SET 参数设置、DDL 语句编写、DML 语句编写**。下面以[Inserting Into Tables](https://github.com/ververica/flink-sql-cookbook/blob/main/foundations/02_insert_into/02_insert_into.md) 为例。 + +![SQL](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/SQL.png) + +另外,FlinkSQL 的语法详见[ SQL 开发指南](./sql_development_guide/development_guide_overview.md) + +### 作业配置 + +当 FlinkSQL 编写完成后,即可进行作业的配置。作业配置的详细说明详见用户手册的[作业基础配置](./administrator_guide/studio/job_config.md) + +在作业配置中,您可以选择作业执行模式、Flink 集群、SavePoint策略等配置,对作业进行提交前的配置。 + +![job_config](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/job_config.png) + +### SQL查询预览 + +上述 FlinkSQL 作业配置完成后,可以对 SQL 做查询预览。 + +点击**执行配置**,开启**打印流**,保存。点击**执行当前的SQL**。即可获取到最新结果。 + +![SQLView](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/SQLView.png) + + + +### 发布运行作业 + +在数据写入 Sink 端时,Dlinky 提供了**异步提交** 和 **上线发布**功能,将其作业提交到远程集群 + +![SQLInsert](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/SQLInsert.png) + + + +### 查看作业运行情况 + +当作业提交到远程集群后,您可以在**运维中心**查看作业的运行情况。 + +![dataopsCenter](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/dataopsCenter.png) + +运维中心的说明,详见用户手册的**[运维中心](./administrator_guide/devops_center/deveops_center_intro.md)** + +## 作业开发指引 + +![import](http://www.aiwenmo.com/dinky/docs/zh-CN/quick_start/flinksql_quick_start/import.png) + diff --git a/docs/en-US/guide/roadmap.md b/docs/docs/roadmap.md similarity index 99% rename from docs/en-US/guide/roadmap.md rename to docs/docs/roadmap.md index 992df44f42..0298316eda 100644 --- a/docs/en-US/guide/roadmap.md +++ b/docs/docs/roadmap.md @@ -1,3 +1,10 @@ +--- +sidebar_position : 17 +id: roadmap +title: Road Map +--- + + ### 任务生命周期管理 FlinkSQL 生命周期:创建、开发、调试、发布、上线、注销。 diff --git a/docs/docs/sql_development_guide/_category_.json b/docs/docs/sql_development_guide/_category_.json new file mode 100644 index 0000000000..769f2da41c --- /dev/null +++ b/docs/docs/sql_development_guide/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "SQL 开发指南", + "position": 8 +} diff --git a/docs/docs/sql_development_guide/data_type.md b/docs/docs/sql_development_guide/data_type.md new file mode 100644 index 0000000000..7efa504d98 --- /dev/null +++ b/docs/docs/sql_development_guide/data_type.md @@ -0,0 +1,37 @@ +--- +sidebar_position: 3 +id: data_type +title: 数据类型 +--- + +FlinkSQL 采用符合 ANSI SQL 规范的定义,支持丰富的数据类型。用户在使用 `CREATE TABLE` 语句定义一个数据表时,可以用这些数据类型来定义每个字段的类型。 + +## 支持的数据类型 + +| 类型名称 | 说明 | +| :----------------------------------------------------------- | :----------------------------------------------------------- | +| CHAR
CHAR(n) | 固定长度字符串。n 表示容纳的字符数,默认为1,即 CHAR 等价于 CHAR(1) | +| VARCHAR
VARCHAR(n)
STRING | 可变长度字符串。n 表示最多容纳的字符数,默认为1,
即 VARCHAR 等价于 VARCHAR(1)。STRING 等价于 VARCHAR(2147483647) | +| BINARY BINARY(n) | 类型可以使用 BINARY (n)声明。n 表示容纳的字节数量,默认为1,
即 BINARY 等价于 BINARY(1) | +| VARBINARY VARBINARY(n) BYTES | 类型可以使用 VARBINARY (n)声明。其中 n 是最大字节数。N 的值
必须介于1和2之间,147,483,647(包括两者)。如果没有指定长度,
则 n 等于1。BYTES 等价于 VARBINARY(2147483647) | +| DECIMAL
DECIMAL(p)
DECIMAL(p,s)
DEC
DEC(p)
DEC(p, s)
NUMERIC
NUMERIC(p)
NUMERIC(p, s) | 类型可以使用 DECIMAL (p,s)声明,p 表示数字的总位数(精度),
取值区间为[1,38],默认值是10。s 表示小数点右边的位数
(尾数),取值区间为[0,p],默认值是0。NUMERIC (p,s)
和 DEC (p,s)与这种类型等价,可以互换使用 | +| TINYINT | 1字节有符号整数的数据类型,取值范围是[-128,127] | +| SMALLINT | 2字节有符号整数的数据类型,取值范围是[-32768,32767] | +| INT
INTEGER | 4字节有符号整数的数据类型,取值范围是[-2147483648,
2147483647]。INTEGER等价于这个类型 | +| BIGINT | 8字节有符号整数的数据类型,取值范围是[-9223372036854775808,9223372036854775807] | +| FLOAT | 4字节单精度浮点数的数据类型, | +| DOUBLE
DOUBLE PRECISION | 8个字节的双精度浮点数,DOUBLE PRECISION等价于这个类型 | +| DATE | 由年月日组成的数据类型,取值范围是[0000-01-01,9999-12-31] | +| TIME
TIME(p) | 不带时区的时间的数据类型,包括小时: 分钟: 秒。
取值范围是[00:00:00.000000000,23:59:59.999999999]。
p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为0 | +| TIMESTAMP
TIMESTAMP(p)
TIMESTAMP WITHOUT TIME ZONE
TIMESTAMP(p) WITHOUT TIME ZONE | 不带时区的时间戳的数据类型。取值范围
是[0000-01-01 00:00:00.000000000,
9999-12-31 23:59:59.999999999]。
p 的值必须介于0和9之间(两者都包含在内)。
如果未指定精度,则 p 等于6。 | +| TIMESTAMP WITH TIME ZONE
TIMESTAMP(p) WITH TIME ZONE | 带有时区的时间戳的数据类型。取值范围是
[0000-01-01 00:00:00.000000000 +14:59,
9999-12-31 23:59:59.999999999 -14:59]。
类型可以使用 TIMESTAMP (p) WITH TIME ZONE 声明,
其中 p 是小数秒的位数(精度)。P 的值必须介于0和9之
间(两者都包含在内)。如果没有
如果指定了精度,p 等于6 | +| INTERVAL YEAR
INTERVAL YEAR(p)
INTERVAL YEAR(p) TO MONTH
INTERVAL MONTH | 类型可以使用上面的组合声明,其中 p 是年的位数(年精度)。P 的值必须介于1和4之间(两者都包含在内)。如果未指定年份精度,则 p 等于2。取值范围是[-9999-11,+9999-11] | +| INTERVAL DAY
INTERVAL DAY(p1)
INTERVAL DAY(p1) TO HOUR
INTERVAL DAY(p1) TO MINUTE
INTERVAL DAY(p1) TO SECOND(p2)
INTERVAL HOUR
INTERVAL HOUR TO MINUTE
INTERVAL HOUR TO SECOND(p2)
INTERVAL MINUTE
INTERVAL MINUTE TO SECOND(p2)
INTERVAL SECOND
INTERVAL SECOND(p2) | 表示以天、时、分、秒、纳秒表示的细粒度时间间隔,最高精度为纳秒。
取值范围是[-999999 23:59:59.999999999,+999999 23:59:59.999999999]
p1是天的位数(日精度) ,P1的值必须介于1和6之间(两者都包括在内)。
p2是小数秒的位数(小数精度)。P2的值必须介于0和9之间(两者都包含在内)。默认情况下它等于2。 | +| ARRAY | 类型可以使用 `ARRAY` 声明,其中 t 是所包含元素的数据类型 | +| MAP | 类型可以使用 `MAP` 来声明,其中 kt 是关键元素的数据类型,vt 是值元素的数据类型 | +| MULTISET | 类型可以使用 `MULTISET ` 声明,其中 t 是所包含元素的数据类型。 | +| ROW | 可以使用 `ROW < n0 t0’d 0’,n1 t1’d 1’,... >` 声明类型,其中 n 是字段的唯一名称,t 是字段的逻辑类型,d 是字段的描述.ROW (...)是更接近 SQL 标准的同义词。例如,`ROW (myField INT,myOtherField BOOLEAN)`等价于 `ROW < myField INT,myOtherField BOOLEAN >` | +| BOOLEAN | 任意序列化类型的数据类型。这种类型是表生态系统中的一个黑盒子,仅在边缘反序列化 | +| RAW | 类型可以使用 RAW (‘ class’,‘ snapshot’)声明,其中类是原始类,快照是 base64编码中的序列化 TypeSerializerSnapshot。通常,类型字符串不是直接声明的,而是在持久化类型时生成的。 | +| NULL | 表示非类型化 NULL 值的数据类型 | + diff --git a/docs/docs/sql_development_guide/ddl_statement/_category_.json b/docs/docs/sql_development_guide/ddl_statement/_category_.json new file mode 100644 index 0000000000..25deffb2b4 --- /dev/null +++ b/docs/docs/sql_development_guide/ddl_statement/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "DDL 语句", + "position": 5 +} diff --git a/docs/docs/sql_development_guide/ddl_statement/alter_statements.md b/docs/docs/sql_development_guide/ddl_statement/alter_statements.md new file mode 100644 index 0000000000..e7fe3d3fa2 --- /dev/null +++ b/docs/docs/sql_development_guide/ddl_statement/alter_statements.md @@ -0,0 +1,40 @@ +--- +sidebar_position: 3 +id: alter_statements +title: ALTER 语句 +--- + +ALTER 语句用于修改 Catalog 中已注册的表/视图/函数定义。 + +FlinkSQL 支持如下 ALTER 语句 + +- ALTER TABLE +- ALTER VIEW +- ALTER FUNCTION + +## ALTER TABLE + +将给定的表名重命名为另一个新的表名。 + +```sql +ALTER TABLE [catalog_name.][db_name.]table_name RENAME TO new_table_name; +``` + +## ALTER VIEW + +将给定视图重命名为同一目录和数据库中的新名称。 + +```sql +ALTER VIEW [catalog_name.][db_name.]view_name RENAME TO new_view_name; +``` + +## ALTER FUNCTION + +使用新的标识符和可选的语言标记更改目录函数。如果目录中不存在函数,则引发异常。 + +```sql +ALTER [TEMPORARY|TEMPORARY SYSTEM] FUNCTION + [IF EXISTS] [catalog_name.][db_name.]function_name + AS '函数类全名' [LANGUAGE JAVA|SCALA|Python] +``` + diff --git a/docs/docs/sql_development_guide/ddl_statement/create_statements.md b/docs/docs/sql_development_guide/ddl_statement/create_statements.md new file mode 100644 index 0000000000..0fc1442e80 --- /dev/null +++ b/docs/docs/sql_development_guide/ddl_statement/create_statements.md @@ -0,0 +1,184 @@ +--- +sidebar_position: 1 +id: create_statements +title: CREATE 语句 +--- + +CREATE 语句用于将表/视图/函数注册到当前或指定的 Catalog 中。注册的表/视图/函数可用于 SQL 查询。 + +FlinkSQL 支持如下CREATE语句 + +- CREATE CATALOG +- CREATE DATABASE +- CREATE TABLE +- CREATE VIEW +- CREATE FUNCTION + +## CREATE CATALOG + +使用给定的属性创建 Catalog。如果具有相同名称的目录已经存在,则会引发异常。当前 Dinky 支持的 Catalog 详见数据开发中的 [Catalog 管理](../../administrator_guide/studio/catalog_manage)。 + +### 语法结构 + +```sql +CREATE CATALOG catalog_name + WITH (key1=val1, key2=val2, ...) +``` + +### With 参数说明 + +WITH 参数通常用于指定 Catalog 所需参数,语法为`'key1'='value1', 'key2' = 'value2'`的键值对。 + +### 示例 + +Hive Catalog 示例 + +```sql +CREATE CATALOG ods_catalog WITH ( + 'type' = 'hive', + 'default-database' = 'default', + 'hive-version' = '2.1.1', + 'hive-conf-dir' = '/etc/hive/conf', + 'hadoop-conf-dir' = '/etc/hadoop/conf' +); +``` + +## CREATE DATABASE + +创建数据库。如果已存在具有相同名称的数据库,则会引发异常 + +### 语法结构 + +```sql +CREATE DATABASE [IF NOT EXISTS] [catalog_name.]db_name + [COMMENT database_comment] +``` + +### 示例 + +```sql +CREATE DATABASE IF NOT EXISTS ods_catalog.test +``` + +## CREATE TABLE + +CREATE TABLE 语句用来描述数据源(Source)或者数据目的(Sink)表,并将其定义为一张表,以供后续语句引用。 + +### 语法结构 + +```sql +CREATE TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name + ( + { <列定义> | <计算列定义> }[ , ...n] + [ ] + [ <表约束定义, 例如 Primary Key 等> ][ , ...n] + ) + [COMMENT 表的注释] + [PARTITIONED BY (分区列名1, 分区列名2, ...)] + WITH (键1=值1, 键2=值2, ...) + [ LIKE 其他的某个表 [( )] ] +``` + +### 字句说明 + +CREATE TABLE 语句创建的表,既可以作为数据源表,也可以作为目标表。但是如果没有对应的 Connector,则会在运行时报错。 + +```sql +<列定义>: + column_name column_type [ ] [COMMENT column_comment] +<列的约束定义>: + [CONSTRAINT constraint_name] PRIMARY KEY NOT ENFORCED +<表的约束定义>: + [CONSTRAINT constraint_name] PRIMARY KEY (column_name, ...) NOT ENFORCED +<元数据列列定义:虚拟列>: + column_name column_type METADATA [ FROM metadata_key ] [ VIRTUAL ] +<计算列定义>: + column_name AS computed_column_expression [COMMENT column_comment] +: + WATERMARK FOR rowtime_column_name AS watermark_strategy_expression +<表名称定义>: + [catalog_name.][db_name.]table_name +: +{ + { INCLUDING | EXCLUDING } { ALL | CONSTRAINTS | PARTITIONS } + | { INCLUDING | EXCLUDING | OVERWRITING } { GENERATED | OPTIONS | WATERMARKS } +}[, ...] +``` + +**计算列** + +计算列是一种虚拟列,它是逻辑上的定义而非数据源中实际存在的列,通常由同一个表的其他列、常量、变量、函数等计算而来。例如,如果数据源中定义了 price和 quantity,那么就可以新定义一个 cost字段,即 `cost AS price * quantity`,即可在后续查询中直接使用 cost 字段 + +:::tip 注意事项 + +计算列只允许在 CREATE TABLE 语句中使用 + +::: + +**Watermark 定义** + +Watermark 决定着 Flink 作业的时间模式,定义方式: + +```sql +WATERMARK FOR 某个Rowtime类型的列名 AS 某个Watermark策略表达式 +``` + +**示例** + +```sql +CREATE TABLE student ( + `user` BIGINT, + product STRING, + registerTime TIMESTAMP(3), + WATERMARK FOR registerTime AS registerTime - INTERVAL '5' SECOND +) WITH ( . . . ); +``` + +**主键 PRIMARY KEY** + +主键约束既可以与列定义(列约束)一起声明,也可以作为单行(表约束)声明。对于这两种情况,它都应该只声明为单例。如果同时定义多个主键约束,则会引发异常。 + +**PARTITIONED BY** + +根据指定的列对创建的表进行分区。如果这个表用作文件系统接收器,则为每个分区创建一个目录。 + +**WITH 参数** + +WITH 参数通常用于指定数据源和数据目的的 Connector 所需参数,语法为`'key1'='value1', 'key2' = 'value2'`的键值对。 + +对于常见的 FlinkSQL Connector 的具体的使用方法,详见 [FlinkSQL Connector](../../connector/flinksql_connectors) + +## CREATE VIEW + +用户可以使用 CREATE VIEW 语句创建视图。视图是一个虚拟表,基于某条 SELECT 语句。视图可以用在定义新的虚拟数据源(类型转换、列变换和虚拟列等)。 + +查询表达式创建视图。如果目录中已存在具有相同名称的视图,则会引发异常。 + +### 语法结构 + +```sql +CREATE [TEMPORARY] VIEW [IF NOT EXISTS] [catalog_name.][db_name.]view_name +AS SELECT 语句 +``` + + + +## CREATE FUNCTION + +对于 SQL 作业,用户可以上传**自定义程序包**,然后在作业开发中使用。 + +### 语法结构 + +目前FlinkSQL 支持 Java、 Scala 和 Python 三种语言编写的程序包。当用户上传了自定义程序包后,在界面上即可用下面的 CREATE FUNCTION 语句来声明: + +```sql +CREATE TEMPORARY SYSTEM FUNCTION 函数名 + AS '函数类全名' [LANGUAGE JAVA|SCALA|Python] +``` + +### 示例 + +```sql +CREATE FUNCTION parserJsonArray AS 'qhc.com.flink.UDTF.ParserJsonArray' language JAVA; +``` + diff --git a/docs/docs/sql_development_guide/ddl_statement/drop_statements.md b/docs/docs/sql_development_guide/ddl_statement/drop_statements.md new file mode 100644 index 0000000000..f6bf6bb516 --- /dev/null +++ b/docs/docs/sql_development_guide/ddl_statement/drop_statements.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 2 +id: drop_statements +title: DROP 语句 +--- + +DROP 语句用于从当前或指定的目录中删除已注册的表/视图/函数/Catalog。 + +FlinkSQL 支持如下DROP 语句 + +- DROP CATALOG +- DROP DATABASE +- DROP TABLE +- DROP VIEW +- DROP FUNCTION + +## DROP CATALOG + +删除具有给定目录名称的目录 + +### 语法结构 + +```sql +DROP CATALOG [IF EXISTS] catalog_name; +``` + +## DROP DATABASE + +删除具有给定数据库名称的数据库。如果要删除的数据库不存在,则会引发异常。 + +### 语法结构 + +```sql +DROP DATABASE [IF EXISTS] [catalog_name.]db_name [ (RESTRICT | CASCADE) ]; +``` + +## DROP TABLE + +删除具有给定表名的表。如果要删除的表不存在,则引发异常。 + +### 语法结构 + +```sql +DROP [TEMPORARY] TABLE [IF EXISTS] [catalog_name.][db_name.]table_name; +``` + +## DROP VIEW + +删除具有目录和数据库命名空间的视图。如果要删除的视图不存在,则引发异常。 + +### 语法结构 + +```sql +DROP [TEMPORARY] VIEW [IF EXISTS] [catalog_name.][db_name.]view_name; +``` + +## DROP FUNCTION + +删除具有目录和数据库命名空间的目录函数。如果要删除的函数不存在,则引发异常。 + +### 语法结构 + +```sql +DROP [TEMPORARY|TEMPORARY SYSTEM] FUNCTION [IF EXISTS] [catalog_name.][db_name.]function_name; +``` \ No newline at end of file diff --git a/docs/docs/sql_development_guide/development_guide_overview.md b/docs/docs/sql_development_guide/development_guide_overview.md new file mode 100644 index 0000000000..24f11a1100 --- /dev/null +++ b/docs/docs/sql_development_guide/development_guide_overview.md @@ -0,0 +1,18 @@ +--- +sidebar_position: 1 +id: development_guide_overview +title: 开发指南概述 +--- + +SQL 与其他的编程语言相比学习成本较低,使用 SQL 作业进行开发将极大的降低数据开发人员使用 Flink 的门槛。 + +本章节提供了 FlinkSQL 作业的开发指南。通过阅读本章节,您将很快完成 FlinkSQL的作业开发。 + +- [词汇术语](./glossary) +- [数据类型](./data_type) +- [SET 语句](./set_statement) +- [DDL 语句](./ddl_statement/create_statements) +- [DML 语句](./dml_statements/insert_statements) +- [运算符和内置函数](./operators_functions) +- [扩展语法](./extend_statement) + diff --git a/docs/docs/sql_development_guide/dml_statements/_category_.json b/docs/docs/sql_development_guide/dml_statements/_category_.json new file mode 100644 index 0000000000..a8867f008f --- /dev/null +++ b/docs/docs/sql_development_guide/dml_statements/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "DML 语句", + "position": 6 +} diff --git a/docs/docs/sql_development_guide/dml_statements/insert_statements.md b/docs/docs/sql_development_guide/dml_statements/insert_statements.md new file mode 100644 index 0000000000..08ac938bb2 --- /dev/null +++ b/docs/docs/sql_development_guide/dml_statements/insert_statements.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 1 +id: insert_statements +title: INSERT 语句 +--- + +INSERT INTO 语句必须和 SELECT 子查询联用,SELECT 的数据会写入到指定目标表(Table Sink)中。 + +## 语法结构 + +```sql +INSERT { INTO | OVERWRITE } [catalog_name.][db_name.]table_name [PARTITION part_spec] [column_list] SELECT 语句 +``` + +## 示例 + +```sql +-- INTO +INSERT INTO page_kafka_sink + SELECT user, cnt, country FROM mysql_source; + +-- Overwrites +INSERT OVERWRITE hive_page PARTITION (date='2019-8-30', country='China') + SELECT user, cnt FROM mysql_source; +``` + + + +:::warning 注意事项 + +- 如果在 WITH 参数里指定了某个 Sink,那么请务必自行上传相应的 Connector 程序包 +- 对于读写 Kafka 的场景,推荐使用不带版本号的 `flink-connector-kafka`程序包,并将 `connector.version`参数设置为 `universal`,以获得最新的功能适配。**不建议**使用旧版本 + +::: diff --git a/docs/docs/sql_development_guide/dml_statements/show_statements.md b/docs/docs/sql_development_guide/dml_statements/show_statements.md new file mode 100644 index 0000000000..cf6e25177e --- /dev/null +++ b/docs/docs/sql_development_guide/dml_statements/show_statements.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 2 +id: show_statements +title: SHOW 语句 +--- + +SHOW 语句用于列出所有目录,或列出当前目录中的所有数据库,或列出当前目录和当前数据库中的所有表/视图,或显示当前目录和数据库,或显示指定表的创建语句,或列出当前目录和当前数据库中的所有函数,包括系统函数和用户定义函数,或仅列出当前目录和当前数据库中的用户定义函数。 + +FlinkSQL 支持如下 SHOW 语句: + +- SHOW CATALOGS +- SHOW CURRENT CATALOG +- SHOW DATABASES +- SHOW CURRENT DATABASE +- SHOW TABLES +- SHOW CREATE TABLE +- SHOW VIEWS +- SHOW FUNCTIONS + +## SHOW CATALOGS + +显示所有 Catalog。 + +```sql +SHOW CATALOGS; +``` + +## SHOW CURRENT CATALOG + +显示当前 Catalog。 + +```sql +SHOW CURRENT CATALOG; +``` + +## SHOW DATABASES + +显示当前目录中的所有数据库。 + +```sql +SHOW DATABASES; +``` + +## SHOW CURRENT DATABASE + +显示当前数据库。 + +```sql +SHOW CURRENT DATABASE; +``` + +## SHOW TABLES + +显示当前 Catalog 和当前数据库中的所有表。 + +```sql +SHOW TABLES; +``` + +## SHOW CREATE TABLE + +显示指定表的创建表语句。 + +```sql +SHOW CREATE TABLE [catalog_name.][db_name.]table_name; +``` + +## SHOW VIEWS + +显示当前 Catalog 和当前数据库中的所有视图。 + +```sql +SHOW VIEWS; +``` + +## SHOW FUNCTIONS + +显示当前 Catalog 和当前数据库中的所有函数,包括系统函数和用户定义函数。 + +```sql +SHOW [USER] FUNCTIONS; +``` + +:::tip 说明 + + USER 只显示当前 Catalog 和当前数据库中的用户定义函数。 + +::: \ No newline at end of file diff --git a/docs/docs/sql_development_guide/extend_statement.md b/docs/docs/sql_development_guide/extend_statement.md new file mode 100644 index 0000000000..ae035ccc1e --- /dev/null +++ b/docs/docs/sql_development_guide/extend_statement.md @@ -0,0 +1,141 @@ +--- +sidebar_position: 8 +id: extend_statement +title: 扩展语法 +--- + + Dinky 在 FlinkSQL 的基础上新增扩展语法,用于一些参数变量及表值聚合,注册的参数变量及表值聚合可用于 SQL 查询。 + + Dinky 当前支持如下扩展语法: + + - 定义变量; + - 查看变量; + - 定义表值聚合; + + + +## 定义变量 + +### 语法结构 + +```sql +key1 := value1; +``` + +### 示例 + +```sql +var1:=student; +select * from ${var1}; +``` + + ## 查看变量 + +```sql +-- 查看所有变量 +SHOW FRAGMENTS; +-- 查看单个变量 +SHOW FRAGMENT var1; +``` + + + +## Flink 连接配置变量 + +### 语法结构 + +```sql +CREATE TABLE table_name ( + [columns1 type1,........] + PRIMARY KEY (pk) NOT ENFORCED +) WITH( + [key1 = value1,........,] + ${dorisdwd} +); +``` + + + +### 示例 + +```sql +CREATE TABLE DWD_INFO ( + `SID` STRING, + `MEMO` STRING, + PRIMARY KEY (SID) NOT ENFORCED +) WITH( + 'table.identifier' = 'dwd.DWD_INFO', + ${dorisdwd} +); +``` + + Flink 连接配置如何添加变量,详见用户手册注册中心的[创建数据源](../administrator_guide/register_center/datasource_manage#创建数据源) + +:::warning 注意事项 + + 如果使用如上变量,需要在数据开发的执行配置中`开启`全局变量。 + +::: + +## 表值聚合 + +Dinky 对 Flink 的表值聚合功能的应用与增强。增强主要在于定义了 AGGTABLE 来通过 FlinkSql 进行表值聚合的实现。 + +### 语法结构 + +```sql +CREATE AGGTABLE agg_name AS +SELECT [columns1,columns2,columns3,.....] +FROM table_name +GROUP BY columns1,...... +AGG BY columns2,.....; +``` + +### 示例 + +```sql +jdbcconfig:='connector' = 'jdbc', + 'url' = 'jdbc:mysql://127.0.0.1:3306/data?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true', + 'username'='dlink', + 'password'='dlink',; +CREATE TABLE student ( + sid INT, + name STRING, + PRIMARY KEY (sid) NOT ENFORCED +) WITH ( + ${jdbcconfig} + 'table-name' = 'student' +); +CREATE TABLE score ( + cid INT, + sid INT, + cls STRING, + score INT, + PRIMARY KEY (cid) NOT ENFORCED +) WITH ( + ${jdbcconfig} + 'table-name' = 'score' +); +CREATE TABLE scoretop2 ( + cls STRING, + score INT, + `rank` INT, + PRIMARY KEY (cls,`rank`) NOT ENFORCED +) WITH ( + ${jdbcconfig} + 'table-name' = 'scoretop2' +); +CREATE AGGTABLE aggscore AS +SELECT cls,score,rank +FROM score +GROUP BY cls +AGG BY TOP2(score) as (score,rank); + +insert into scoretop2 +select +b.cls,b.score,b.`rank` +from aggscore b +``` + + + diff --git a/docs/docs/sql_development_guide/glossary.md b/docs/docs/sql_development_guide/glossary.md new file mode 100644 index 0000000000..5f22a4016e --- /dev/null +++ b/docs/docs/sql_development_guide/glossary.md @@ -0,0 +1,37 @@ +--- +sidebar_position: 2 +id: glossary +title: 词汇术语 +--- + +由于 StreamSQL与传统 SQL 在语法上存在一定的差别,在您学习 FlinkSQL 语法之前,首先需要了解在 SQL中定义的一些关键字。 + +FlinkSQL常用术语如下 + +| 词汇术语 | 说明 | +| :-------------: | :----------------------------------------------------------: | +| Source 端 | 为 FlinkSQL 持续提供输入数据 | +| Sink 端 | 为 FlinkSQL 处理结果输出的目的地 | +| Schema | 表示一个表的结构信息,例如各个列名、列类型等 | +| 时间模式 | FlinkSQL 处理数据时获取的时间戳,目前支持 Event Time、Processing Time 两种模式 | +| Event Time | Event Time 时间模式下,时间戳由输入数据的字段提供,可以用 WATERMARK FOR 语句
指定该字段并启用 Event Time 时间模式 | +| Watermark | 表示一个特定的时间点,在该时间点之前的所有数据已经得到妥善处理。
Watermark 由系统自动生成,你可以通过WATERMARK FOR columnName AS 定义。 | +| Processing Time | Processing Time 时间模式下,时间戳由系统自动生成并添加到数据源中(以`PROCTIME`命名,SELECT *时不可见,使用时必须显式指定)。它以每条数据被系统处理的时间作为时间戳 | +| 计算列 | 计算列是一个使用 `column_name AS computed_column_expression` 语法生成的虚拟列。它由使用同一表中其他列的非查询表达式生成,并且不会在表中进行物理存储. | +| 时间窗口 | 目前系统支持 TUMBLE、HOP、Session、CUMULATE三种时间窗口,具体详见[时间窗口](https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/window-tvf/) | +| SQL Hints | SQL hints 是和 SQL 语句一起使用来改变执行计划的,常用在动态表的查询中,详见[SQL hints](https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/hints/) | + + + +:::warning 注意事项 + + **Flink提供了几种常用的watermark策略** + +​ 1.严格意义上递增的时间戳,发出到目前为止已观察到的最大时间戳的水印。时间戳小于最大时间戳的行不会迟到。 WATERMARK FOR rowtime_column AS rowtime_column + +​ 2.递增的时间戳,发出到目前为止已观察到的最大时间戳为负1的水印。时间戳等于或小于最大时间戳的行不会迟到。 WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL '0.001' SECOND。 + +​ 3.有界时间戳(乱序) 发出水印,它是观察到的最大时间戳减去指定的延迟,例如,WATERMARK FOR rowtime_column AS rowtime_column-INTERVAL'5'SECOND是5秒的延迟水印策略。 +​ WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL 'string' timeUnit. + +::: \ No newline at end of file diff --git a/docs/docs/sql_development_guide/operators_functions.md b/docs/docs/sql_development_guide/operators_functions.md new file mode 100644 index 0000000000..f7197c2757 --- /dev/null +++ b/docs/docs/sql_development_guide/operators_functions.md @@ -0,0 +1,26 @@ +--- +sidebar_position: 7 +id: operators_functions +title: 运算符和内置函数 +--- + +FlinkSQL 支持丰富的运算符合内置函数,包括比较函数、聚合函数等。目前 Flink 每个版本可能有差异。按照所使用的版本查找相应的函数。 + +| 函数功能 | 版本 | +| :-------------: | :----------------------------------------------------------: | +| 比较函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#comparison-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#comparison-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#comparison-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#comparison-functions) | +| 逻辑函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#logical-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#logical-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#logical-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#logical-functions) | +| 算术函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#arithmetic-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#arithmetic-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#arithmetic-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#arithmetic-functions) | +| 字符串函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#string-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#string-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#string-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#string-functions) | +| 时间函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#temporal-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#temporal-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#temporal-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#temporal-functions) | +| 条件函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#conditional-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#conditional-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#conditional-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#conditional-functions) | +| 类型转换函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#type-conversion-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#type-conversion-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#type-conversion-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#type-conversion-functions) | +| Collection 函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#collection-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#collection-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#collection-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#collection-functions) | +| Json 函数 | Flink1.11 不支持
Flink1.12 不支持
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#json-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#json-functions) | +| Value 构造函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#value-construction-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#value-construction-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#value-construction-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#value-construction-functions) | +| Value 取向函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#value-access-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#value-access-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#value-access-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#value-access-functions) | +| Grouping 函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#grouping-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#grouping-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#grouping-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#grouping-functions) | +| Hash 函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#hash-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#hash-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#hash-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#hash-functions) | +| Auxiliary 函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#auxiliary-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#auxiliary-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#auxiliary-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#auxiliary-functions) | +| 聚合函数 | [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#aggregate-functions)
[Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html#aggregate-functions)
[Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/functions/systemfunctions/#aggregate-functions)
[Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/functions/systemfunctions/#aggregate-functions) | + diff --git a/docs/docs/sql_development_guide/set_statement.md b/docs/docs/sql_development_guide/set_statement.md new file mode 100644 index 0000000000..37e2d4a00f --- /dev/null +++ b/docs/docs/sql_development_guide/set_statement.md @@ -0,0 +1,35 @@ +--- +sidebar_position: 4 +id: set_statement +title: SET 语句 +--- + +SET 语句可以调整作业的关键运行参数。目前大多数参数都可以在 SQL 作业中进行配置。 + +## 语法 + +SET 语句中字符串类型的配置项和参数值可以不用半角单引号括起来或者必须用半角单引号括起来。 + +```sql +SET key = value; +#或者 +SET `key` = `value`; +``` + +各个版本的参数配置详见Flink开源社区: + +- [Flink1.11](https://nightlies.apache.org/flink/flink-docs-release-1.11/dev/table/config.html#overview) +- [Flink1.12](https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/config.html#overview) +- [Flink1.13](https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/table/config/#overview) + +- [Flink1.14](https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/config/#overview) + +:::warning 注意事项 + + SET 语句行尾需加上分号 + + SET 命令不支持注释,请不要在其后增加 `--` 注释信息 + + SET 优先级> **作业配置** > **集群管理配置** > **Flink 配置文件** + +::: \ No newline at end of file diff --git a/docs/zh-CN/others/thanks.md b/docs/docs/thanks.md similarity index 54% rename from docs/zh-CN/others/thanks.md rename to docs/docs/thanks.md index 2747ca3c1e..2bb33a2b8a 100644 --- a/docs/zh-CN/others/thanks.md +++ b/docs/docs/thanks.md @@ -1,3 +1,10 @@ +--- +sidebar_position: 18 +id: thanks +title: 致谢 +--- + + [Apache Flink](https://github.com/apache/flink) [Mybatis Plus](https://github.com/baomidou/mybatis-plus) @@ -6,10 +13,10 @@ [Monaco Editor](https://github.com/Microsoft/monaco-editor) -[SpringBoot]() +[SpringBoot](https://spring.io/projects/spring-boot) -[docsify](https://github.com/docsifyjs/docsify/) +[docusaurus]( https://github.com/facebook/docusaurus/) 此外,感谢 [JetBrains](https://www.jetbrains.com/?from=dlink) 提供的免费开源 License 赞助 -[![JetBrains](http://www.aiwenmo.com/dinky/docs/zh-CN/others/thanks/jetbrains.svg)](https://www.jetbrains.com/?from=dlink) \ No newline at end of file +[![JetBrains](http://www.aiwenmo.com/dinky/docs/zh-CN/thanks/jetbrains.svg)](https://www.jetbrains.com/?from=dlink) \ No newline at end of file diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js new file mode 100644 index 0000000000..8cdb853dfc --- /dev/null +++ b/docs/docusaurus.config.js @@ -0,0 +1,283 @@ +/* + * + * 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. + * + */ + +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion +const path = require('path'); +const versions = require('./versions.json'); +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'Dinky', //网站标题 | Site title + tagline: 'Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑', // 网站标语 | Tagline for your website + url: 'http://www.dlink.top/', // 网站网址 | Your website's URL + baseUrl: '/', // 站点的相对路径 可将其视为是主机名后的路径 | Path to your website + staticDirectories: ['static/img','blog/blog_img'], // 静态文件目录 | Path to static files + // trailingSlash: true, //此选项允许您自定义 URL/链接后是否添加结尾斜杠 | Whether to append a trailing slash to the URL when rendering URLs + onBrokenLinks: 'ignore', // Docusaurus 在检测到无效链接时的行为 | Docusaurus behavior when invalid links are detected -> 类型:'ignore' | 'log' | 'warn' | 'error' | 'throw' | + onBrokenMarkdownLinks: 'warn', // Docusaurus 在检测到无效 Markdown 链接时的行为 | Docusaurus behavior when detecting invalid markdown links -> 类型:'ignore' | 'log' | 'warn' | 'error' | 'throw' + onDuplicateRoutes: 'warn', // Docusaurus 在检测到重复的路由时的行为 | Behavior of docusaurus when duplicate routes are detected -> 类型:'ignore' | 'log' | 'warn' | 'error' | 'throw' + favicon: 'dinky_logo.svg', // 左侧logo | left logo + organizationName: 'DataLinkDC', // 拥有此源的 GitHub 用户或组织。 用于部署命令。 | The GitHub user or organization that owns this source. Command for deployment. + projectName: 'dinky-website', // GitHub 源的名称。 用于部署命令。 | The name of the GitHub repository. Command for deployment. + deploymentBranch: 'main', // GitHub Pages 的部署分支。 用于部署命令。 | The branch to deploy to GitHub Pages. Command for deployment. + customFields:{ // 自定义字段 | Custom fields + structTitle: 'Dinky', + structSubTitle: 'Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑', + // structDescription: custom_fields.structDesc(), + learningMore:'https://space.bilibili.com/366484959/video' + }, + i18n: { + defaultLocale: 'zh-cn', + locales: ['zh-cn'], + // locales: ['zh-cn','en'], + localeConfigs: { + 'zh-cn': { + label: "简体中文", + direction: 'ltr', + }, + // 'en': { + // label: "English", + // direction: 'ltr', + // }, + }, + }, + presets: [ + [ + 'classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve('./sidebars.js'), + sidebarCollapsible: true, + // Please change this to your repo. + editUrl: ({locale, versionDocsDirPath, docPath}) => { + if (locale !== 'zh-cn') { + return `https://github.com/DataLinkDC/dinky-website/tree/master/i18n/${locale}/${docPath}`; + } + return `https://github.com/DataLinkDC/dinky-website/tree/master/${versionDocsDirPath}/${docPath}`; + }, + }, + blog: { + showReadingTime: true, // 展示阅读时间 | show read time + include: ['**/*.{md,mdx}'], + exclude: [ + '**/_*.{js,jsx,ts,tsx,md,mdx}', + '**/_*/**', + '**/*.test.{js,jsx,ts,tsx}', + '**/__tests__/**', + ], + sortPosts:"descending", // 博客主页分页的排序规则(会根据时间排序) 降序: 'descending' 升序: 'ascending' | Governs the direction of blog post sorting. + postsPerPage: 20, // 博客主页的前{count}篇文章数 | the blog homepage show limit count + readingTime: ({content, frontMatter, defaultReadingTime}) => + defaultReadingTime({content, options: {wordsPerMinute: 300}}), // 阅读时间 md文件中如果不写 date: 此属性 默认是当前时间 + // Please change this to your repo. + editUrl: ({locale, versionDocsDirPath, docPath}) => { // 博客页面修改编辑按钮 + if (locale !== 'zh-cn') { + return `https://github.com/DataLinkDC/dinky-website/tree/master/i18n/${locale}/${docPath}`; + } + return `https://github.com/DataLinkDC/dinky-website/tree/master/${versionDocsDirPath}/${docPath}`; + }, + }, + theme: { + customCss: require.resolve('./src/css/custom.css'), // 自定义css文件 + }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + announcementBar: { + id: 'announcementBar-2', // Increment on change + content: `⭐️   If you like Dinky , give it a star on GitHub`, + backgroundColor: "#BBDFFF", + isCloseable: false, + }, + hideOnScroll: false, // 滚动时是否隐藏 | Whether to hide the sidebar on scroll + hideableSidebar: true, // 是否隐藏侧边栏 | Whether to hide the sidebar in mobile + autoCollapseSidebarCategories: true, // 点击另一个分类时自动折叠当前分类 | Click another category will automatically collapse the current category + navbar: { + title: 'Dinky', + logo: { + alt: 'Dinky', + src: 'side_dinky.svg', + }, + items: [ + { + to: '/', + position: 'right', + label: '主页', + title: '主页', + activeBaseRegex: `^/$`, + }, + { + position: 'right', + label: '文档', + to: "/docs/intro", + items: [ + { + label: "Next", + to: "/docs/next/intro", + }, + { + label: "0.6", + to: "/docs/intro", + }, +// { +// label: "0.6", +// to: "/docs/0.6/intro", +// }, + { + label: "All Versions", + to: "/versions", + }, + ], + }, + { + to: '/download/download', + position: 'right', + label: '下载', + activeBaseRegex: `/download/`, + }, + { + label: '开发者指南', + to: '/docs/next/developer_guide/contribution/how_contribute', + position: 'right', + items: [ + { + label: "如何参与", + to: "/docs/next/developer_guide/contribution/how_contribute", + }, + { + label: "本地调试", + to: "/docs/next/developer_guide/local_debug", + }, + { + label: "远程调试", + to: "/docs/next/developer_guide/remote_debug", + }, + ], + }, + { + to: '/blog', + position: 'right', + label: '博客', + // activeBaseRegex: `/*/`, + }, + { + type: 'localeDropdown', + position: 'right', + }, + // { + // to: 'blog', + // label: '博客', + // position: 'right' + // }, + { + href: 'https://github.com/DataLinkDC/dlink', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: '文档首页', + to: '/docs/intro', + }, + { + label: 'Open Api', + to: '/docs/administrator_guide/studio/openapi', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Discussions', + href: 'https://github.com/DataLinkDC/dlink/discussions', + }, + { + label: 'Issue', + href: 'https://github.com/DataLinkDC/dlink/issues', + }, + { + label: 'Pull Request', + href: 'https://github.com/DataLinkDC/dlink/pulls', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'GitHub', + href: 'https://github.com/DataLinkDC/dlink', + }, + { + label: '博客', + to: '/blog', + }, + ], + }, + ], + logo: { + alt: 'Dinky', + src: 'side_dinky.svg', + width: 100, + height: 30, + }, + copyright: `Copyright © ${new Date().getFullYear()} Dinky, Inc. DataLinkDC.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }), + plugins: [ + 'docusaurus-plugin-less', + [ + '@docusaurus/plugin-content-docs', + { + id: 'download', + path: 'download', + routeBasePath: 'download', + editUrl: ({locale, versionDocsDirPath, docPath}) => { + if (locale !== 'zh-cn') { + return `https://github.com/DataLinkDC/dinky-website/tree/master/i18n/${locale}/${docPath}`; + } + return `https://github.com/DataLinkDC/dinky-website/tree/master/${versionDocsDirPath}/${docPath}`; + }, + sidebarPath: require.resolve('./sidebars.js'), + }, + ], + ] +}; + +module.exports = config; diff --git a/docs/zh-CN/release_notes/dinky-0.4.0.md b/docs/download/dinky-0.4.0.md similarity index 53% rename from docs/zh-CN/release_notes/dinky-0.4.0.md rename to docs/download/dinky-0.4.0.md index 93b9d034b7..070e5e8ca7 100644 --- a/docs/zh-CN/release_notes/dinky-0.4.0.md +++ b/docs/download/dinky-0.4.0.md @@ -1,8 +1,19 @@ +--- +sidebar_position: 100 +title: 0.4.0 release +--- + + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.4.0 | [dlink-release-0.4.0.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.4.0/dlink-release-0.4.0.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.4.0.zip) | + + ## Dinky发行说明 Dinky 0.4.0是对FlinkSQL Studio的正式开源发布版本。 -#### 新增功能 +### 新增功能 - 支持standalone,yarn-session,yarn-per-job,yarn-application 多种模式的 FlinkSQL 执行与作业运维; - 支持yarn-application 的 User Jar 提交; - 支持SavePoint 管理与恢复; diff --git a/docs/zh-CN/release_notes/dinky-0.5.0.md b/docs/download/dinky-0.5.0.md similarity index 71% rename from docs/zh-CN/release_notes/dinky-0.5.0.md rename to docs/download/dinky-0.5.0.md index 0973d4ac2d..ed08740285 100644 --- a/docs/zh-CN/release_notes/dinky-0.5.0.md +++ b/docs/download/dinky-0.5.0.md @@ -1,8 +1,19 @@ +--- +sidebar_position: 99 +title: 0.5.0 release +--- + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.5.0 | [dlink-release-0.5.0.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.5.0/dlink-release-0.5.0.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.5.0.zip) | + + + ## Dinky发行说明 Dinky 0.5.0版本包括对K8S的支持以及数据库,catalog的实现。它还包括对0.4.0 中引入的一些重大更改的修复。 -#### 新增功能 +### 新增功能 - 支持Kubernetes Session 和 Application 模式提交任务 - 新增UDF Java方言的Local模式的在线编写、调试、动态加载 - 新增FlinkSQL 执行环境方言及其应用功能 @@ -24,7 +35,7 @@ Dinky 0.5.0版本包括对K8S的支持以及数据库,catalog的实现。它还 - 新增Yarn 的 Kerboros 验证 - 建立官网文档 -#### 修复 +### 修复 - 修改项目名为 Dinky 以及图标 - 优化所有模式的所有功能的执行逻辑 - 升级各版本 Flink 依赖至最新版本以解决核弹问题 diff --git a/docs/zh-CN/release_notes/dinky-0.5.1.md b/docs/download/dinky-0.5.1.md similarity index 53% rename from docs/zh-CN/release_notes/dinky-0.5.1.md rename to docs/download/dinky-0.5.1.md index 1d283bd260..8760ff1f9f 100644 --- a/docs/zh-CN/release_notes/dinky-0.5.1.md +++ b/docs/download/dinky-0.5.1.md @@ -1,8 +1,18 @@ +--- +sidebar_position: 98 +title: 0.5.1 release +--- + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.5.1 | [dlink-release-0.5.1.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.5.1/dlink-release-0.5.1.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.5.1.zip) | + + ## Dinky发行说明 Dinky 0.5.1 是一个修复版本,其中包括针对前端问题(如优化SQL编辑器性能)的优化。它还包括对0.5.0 中引入的一些重大更改的修复。 -#### 前端 +### 前端 - 修复SHOW和DESC 的查询预览失效; - 修复作业非remote作业进行remote语法校验的问题; - 优化菜单; @@ -16,8 +26,8 @@ Dinky 0.5.1 是一个修复版本,其中包括针对前端问题(如优化SQ - 修复全屏开发退出后 sql 不同步 - 优化作业配置查看及全屏开发按钮 - 新增K8S集群配置 - -#### 后端 + +### 后端 - 增加dlink-client-hadoop 版本定制依赖 - 优化pom及升级log4j至最新 - 升级Flink 1.14.2 到 1.14.3 diff --git a/docs/zh-CN/release_notes/dinky-0.6.0.md b/docs/download/dinky-0.6.0.md similarity index 79% rename from docs/zh-CN/release_notes/dinky-0.6.0.md rename to docs/download/dinky-0.6.0.md index a01d9f5b67..66e3265705 100644 --- a/docs/zh-CN/release_notes/dinky-0.6.0.md +++ b/docs/download/dinky-0.6.0.md @@ -1,8 +1,18 @@ +--- +sidebar_position: 97 +title: 0.6.0 release +--- + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.6.0 | [dlink-release-0.6.0.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.6.0/dlink-release-0.6.0.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.6.0.zip) | + + ## Dinky发行说明 Dinky 0.6.0 是一个新功能版本,主要包括运维中心。 -## 新功能 +### 新功能 - 新增作业目录树关键字搜索框 - 新增 F2 全屏开发 @@ -41,7 +51,7 @@ Dinky 0.6.0 是一个新功能版本,主要包括运维中心。 - 新增作业剪切和粘贴 - 新增实时任务监控容错机制 -## 修复和优化 +### 修复和优化 - 升级 SpringBoot 至 2.6.3 - 升级 Flink 1.13.5 至 1.13.6 diff --git a/docs/zh-CN/release_notes/dinky-0.6.1.md b/docs/download/dinky-0.6.1.md similarity index 65% rename from docs/zh-CN/release_notes/dinky-0.6.1.md rename to docs/download/dinky-0.6.1.md index 839f1790e5..837f51354b 100644 --- a/docs/zh-CN/release_notes/dinky-0.6.1.md +++ b/docs/download/dinky-0.6.1.md @@ -1,8 +1,20 @@ +--- +sidebar_position: 96 +title: 0.6.1 release +--- + + + +| 版本 | 二进制程序 | Source | +| ---------- |----------------------------------------------------------------------------------------------------------------------| ---- | +| 0.6.1 | [dlink-release-0.6.1.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.6.1/dlink-release-0.6.1.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.6.1.zip) | + + ## Dinky发行说明 Dinky 0.6.1 是一个 Bug 修复版本。 -## 新功能 +### 新功能 - 新增 issue 模板 - 新增 Phoenix 的 Flink Connector @@ -12,7 +24,7 @@ Dinky 0.6.1 是一个 Bug 修复版本。 - 新增 飞书 WebHook 报警方式 - 新增 邮箱 报警方式 -## 修复和优化 +### 修复和优化 - 修复 Jar 任务存在空配置时提交失败的 bug - 修复 Mysql 字段类型转换的 bug diff --git a/docs/download/dinky-0.6.2.md b/docs/download/dinky-0.6.2.md new file mode 100644 index 0000000000..794d7e8a47 --- /dev/null +++ b/docs/download/dinky-0.6.2.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 95 +title: 0.6.2 release +--- + + + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.6.2 | [dlink-release-0.6.2.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.6.2/dlink-release-0.6.2.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.6.2.zip) | + + +## Dinky发行说明 + +Dinky 0.6.2 是一个优化和修复的版本。 + +### 新功能 + +- 新增 飞书报警 +- 新增 邮件报警 +- 新增 报警实例测试功能 +- 新增 docker 镜像文件 +- 新增 Remote mode(Standalone、Yarn Session、Kubernetes Session)从 SavePoint 恢复作业 +- 新增 Oracle CDC 多源合并 +- 新增 版本为 0.6.2 + +### 优化 + +- 优化 检查 FlinkSQL 不通过时返回全部的异常信息 +- 优化 Hive 的 pom +- 优化 httpclient 的依赖 +- 优化 报警、数据源、线程任务的 SPI 机制 +- 优化 CDC 多源合并 +- 优化 运维中心始终显示 FlinkWebUI 按钮 +- 优化 集群实例显示 FlinkWebUI 按钮 + +### 修复 + +- 修复 Integer 类型判断方式从 “==” 改为 “equals” +- 修复 Flink 的 hadoop_conf 配置未生效 +- 修复 报警测试的最新配置未生效 +- 修复 飞书报警使用 “@all” 时会触发异常 +- 修复 install 项目失败 +- 修复 Hive 构建 sql 的异常 +- 修复 特殊字符导致全局变量替换失败 +- 修复 不支持查看执行图 sql 的展示异常 +- 修复 CDC 多源合并 Remote 提交的任务同步问题 +- 修复 修改集群配置后显示 “新增成功” +- 修复 Flink Oracle Connector 读取 Date 和 Timestamp 类型的异常 +- 修复 MybatsPlus 实体类 boolean 默认为 false 导致业务错误的异常 +- 修复 修复系统配置的 sql 分隔符默认为 “;\r\n” +- 修复 任务失败导致的循环问题 diff --git a/docs/download/dinky-0.6.3.md b/docs/download/dinky-0.6.3.md new file mode 100644 index 0000000000..d2479e191b --- /dev/null +++ b/docs/download/dinky-0.6.3.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 94 +title: 0.6.3 release +--- + + + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.6.3 | [dlink-release-0.6.3.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.6.3/dlink-release-0.6.3.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.6.3.zip) | + + +## Dinky发行说明 + +Dinky 0.6.3 是一个新增功能和修复的版本。主要是新增了 CDC 整库实时入仓入湖的功能。 + +### 新功能 + +- 新增 CDC 整库实时同步至 kafka 的一个 topic +- 新增 CDC 整库实时同步至 kafka 对应 topic +- 新增 CDC 整库实时入仓 doris +- 新增 CDC 整库实时入湖 hudi +- 新增 CDC 整库同步表名规则 +- 新增 CDC 整库实时 sql sink +- 新增 MysqlCDC 整库同步配置扩展 +- 新增 CDC 整库同步主键注入 +- 新增 Flink 1.15.0 的支持 + +### 修复 + +- 修复当作业停止时作业状态错误的 bug +- 修复 Oracle 不支持的字符集 +- 修复 Clickhouse 元数据无法展示的 bug +- 修复元数据查询切换 bug +- 修复整库同步 Hudi 无法构建 Schema 的 bug +- 修复数据源单元测试的 name 缺失 bug +- 修复默认分隔符为 ';\r\n|;\n' 来解决 windows 和 mac 同时兼容 +- 修复批任务无法正确提交 yarn application 的 bug +- 修复修改作业名失败的 bug +- 修复一些错误文档连接 +- 修复获取作业执行计划被执行两次的 bug + +### 优化 + +- 优化 Java 流的释放 +- 优化 CDC 整库实时入库 doris +- 优化同一节点下无法启动多个进程实例的问题 +- 优化微信告警的发送标题 +- 优化启动文件编码及禁用环境变量 \ No newline at end of file diff --git a/docs/download/dinky-0.6.4.md b/docs/download/dinky-0.6.4.md new file mode 100644 index 0000000000..aa03f883e9 --- /dev/null +++ b/docs/download/dinky-0.6.4.md @@ -0,0 +1,54 @@ +--- +sidebar_position: 93 +title: 0.6.4 release +--- + + + +| 版本 | 二进制程序 | Source | +|-------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 0.6.4 | [dlink-release-0.6.4.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/0.6.4/dlink-release-0.6.4.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/0.6.4.zip) | + + +## Dinky发行说明 + +Dinky 0.6.4 是一个优化修复的版本。 + +### 新功能 + +- 新增整库同步表名参数支持换行和列支持按主键优先排序 +- 新增整库同步日志输出 +- 新增钉钉报警的 @mobile 配置 +- 新增任务的 StreamGraph 导出为 JSON +- 新增任务的 API 接口示例页面 +- 新增数据开发帮助页面 +- 新增普通 SQL 的字段血缘 +- 新增作业监听池来解决频繁写库的问题 +- 新增非 FlinkSQL 作业的导出 StreamGraphPlan 的按钮隐藏 +- 新增数据源的删除按钮 +- 新增整库同步的 jdbc 配置和升级 flinkcdc 版本 + +### 修复 + +- 修复刷新作业监控页面时的抖动问题 +- 修复 Flink Oracle Connector 不能转换 CLOB 到 String 的问题 +- 修复切换任务时保存点未同步刷新的问题 +- 修复 ClusterClient 接口不通版本的兼容性问题 +- 修复 MySQL 类型转换精度信息是空的问题 +- 修复初始化函数的冗余操作 +- 修复整库同步的 decimal 问题 +- 修复获取作业计划失败的问题 +- 修复整库同步 OracleCDC number 不能被转换为 Long 的问题 +- 修复微信企业号报警测试按钮后台错误的问题 +- 修复当切换作业 tab 时无法正确保存修改的作业配置的问题 +- 修复数据源和元数据不能展示别名的问题 +- 修复作业重命名后 tab 未更新的问题 +- 修复 K8S 集群配置的 FlinkLibPath 是空的问题 +- 修复整库同步 String 无法转换为 Timestamp 的问题 + +### 优化 + +- 优化初始化 sql +- 优化打包 +- 优化移除 preset-ui +- 优化 MySQL 字段类型转换 \ No newline at end of file diff --git a/docs/download/dinky-0.6.5.md b/docs/download/dinky-0.6.5.md new file mode 100644 index 0000000000..2f5ec89c75 --- /dev/null +++ b/docs/download/dinky-0.6.5.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 92 +title: 0.6.5 release +--- + + + +| 版本 | 二进制程序 | Source | +|-------|-----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| +| 0.6.5 | [dlink-release-0.6.5.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/v0.6.5/dlink-release-0.6.5.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/v0.6.5.zip) | + + +## Dinky发行说明 + +Dinky 0.6.5 是一个优化修复的版本。 + +### 新功能 + +- 新增 phoenix 的 1.14 版本的 Flink 连接器 +- 新增生成 FlinkSQL 时从元数据中获取空和非空 +- 新增作业实例信息接口 +- 新增运维中心 Flink 快照信息、JobManager 配置信息 +- 新增运维中心 TaskManager 信息 +- 新增作业信息选项卡 +- 新增运维中心 TaskManager 的表和表单详情 +- 新增作业版本管理 +- 新增作业检查点历史信息 +- 新增捕获 CDCSOURCE 中的列值转换异常 +- 新增 TaskManager 信息 +- 新增作业复制 + +### 修复 + +- 修复数据开发数据源别名是"" +- 修复数据开发关闭其他页面无法关闭第一个页面 +- 修复切换元数据时发生异常 +- 修复 flinkLibPath 和 cluster-id 在 K8S 配置中是空 +- 修复 FlinkSql 语句末尾的分号异常 +- 修复 K8S 集群配置不能获取自定义配置 +- 修复 yarn per-job 运行时的空指针异常 +- 修复任务实例信息在强制刷新且失去连接时会清空记录的问题 +- 修复 'table.local-time-zone' 参数不生效的问题 +- 修复邮箱报警不能找到类 javax.mail.Address +- 修复不能校验 'show datatbases' 的问题 +- 修复 setParentId 方法判空错误 +- 修复 CDCSOURCE 里当 FlinkSql 字段名为关键字时不能创建 Flink 表 +- 修复字段血缘分析不能处理相同字段名 +- 修复集群配置页面的问题 +- 修复邮件报警消息不能自定义昵称 +- 修复 dlink-connector-phoenix-1.14 编译异常 +- 修复 Oracle 字段可为空的识别错误 +- 修复 CDCSOURCE 中 MySQL varbinary 和 binary 类型的支持 + +### 优化 + +- 优化作业树搜索结果高亮与选中背景色 +- 优化多处别名是空的显示 +- 优化 explainSqlRecord 代码逻辑 +- 优化集群实例页面 +- 优化血缘分析的刷新 +- 优化作业实例信息接口 +- 优化所有报警的发送信息 \ No newline at end of file diff --git a/docs/download/dinky-0.6.6.md b/docs/download/dinky-0.6.6.md new file mode 100644 index 0000000000..094ad63396 --- /dev/null +++ b/docs/download/dinky-0.6.6.md @@ -0,0 +1,50 @@ +--- +sidebar_position: 91 +title: 0.6.6 release +--- + + + +| 版本 | 二进制程序 | Source | +|-------|-----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| +| 0.6.6 | [dlink-release-0.6.6.tar.gz](https://github.com/DataLinkDC/dlink/releases/download/v0.6.6/dlink-release-0.6.6.tar.gz) | [Source code (zip)](https://github.com/DataLinkDC/dlink/archive/refs/tags/v0.6.6.zip) | + + +## Dinky发行说明 + +Dinky 0.6.6 是一个优化修复的版本。 + +### 新功能 + +- 新增 DevOps 的作业历史版本列表 +- 新增历史版本对比 +- 新增 Flink MySql CataLog,在 FlinkSQLEnv 中添加默认的 mysql CataLog +- 新增 1.13版本 的 Doris 连接 隐藏列 **_DORIS_DELETE** 的处理 +- 新增 dlink-connect-pulsar +- 新增 **运维中心** 作业从**指定 CheckPoint 恢复** +- 新增元数据功能 +- 新增 Flink 元数据信息和列详细信息 +- 升级了 Flink1.15.0 到 Flink1.15.1 +- 新增作业导入和导出任务json文件 +- 新增运维中心的任务 savepoints 列表 + +### 修复 + +- 修复 flink-Connector-Phoenix 并更新 PhoenixDynamicTableFactory +- 修复作业实例导致 OOM,更新 Flink 版本并修复 Flink 和 CDC 版本兼容性错误 +- 修复任务实例的耗时解析错误问题 +- 修复 catalog SPI bug 和 sql bug +- 修复运维中心检查点等信息获取错误 +- 修复在 SQLSinkBuilder 中捕获 tranateToPlan 异常 +- 修复 application 模式提交失败 +- 修复删除告警实例后,告警组下实例仍存在 导致告警错误的问题 +- 修复循环依赖问题 +- 修复删除未引用的类 +- 修复 jobhistory 字段 null 值的问题 + +### 优化 + +- 优化从 api 移除敏感信息(密码), 修正已删除的用户登录信息显示不正确的问题 +- 修正已删除的用户登录信息显示不正确的问题 +- 优化检查点页面 +- 优化 无法获取 flinksql 执行图时的返回提示信息 diff --git a/docs/download/download.md b/docs/download/download.md new file mode 100644 index 0000000000..9978b22f6d --- /dev/null +++ b/docs/download/download.md @@ -0,0 +1,87 @@ +--- +sidebar_position: 1 +title: 下载 Dinky +--- + +使用以下链接,下载并查看发行说明 + +## 0.6.6 release + +- **发行时间:** 2022-07-23 + +- **[下载及发行说明](./dinky-0.6.6)** + +--- + +## 0.6.5 release + +- **发行时间:** 2022-07-03 + +- **[下载及发行说明](./dinky-0.6.5)** + +--- + +## 0.6.4 release + +- **发行时间:** 2022-06-05 + +- **[下载及发行说明](./dinky-0.6.4)** + +--- + +## 0.6.3 release + +- **发行时间:** 2022-05-10 + +- **[下载及发行说明](./dinky-0.6.3)** + +--- + +## 0.6.2 release + +- **发行时间:** 2022-04-17 + +- **[下载及发行说明](./dinky-0.6.2)** + +--- + +## 0.6.1 release + +- **发行时间:** 2022-04-05 + +- **[下载及发行说明](./dinky-0.6.1)** + +--- +## 0.6.0 release + +- **发行时间:** 2022-03-21 + +- **[下载及发行说明](./dinky-0.6.0)** + +--- +## 0.5.1 release + +- **发行时间:** 2022-01-24 + +- **[下载及发行说明](./dinky-0.5.1)** + +--- + +## 0.5.0 release + +- **发行时间:** 2022-01-16 + +- **[下载及发行说明](./dinky-0.5.0)** + + +--- + +## 0.4.0 release + +- **发行时间:** 2021-12-01 + +- **[下载及发行说明](./dinky-0.4.0)** + +--- + + diff --git a/docs/en-US/_coverpage.md b/docs/en-US/_coverpage.md deleted file mode 100644 index 2dbb4c6b61..0000000000 --- a/docs/en-US/_coverpage.md +++ /dev/null @@ -1,14 +0,0 @@ -![logo](../_media/dinky.svg) - -# Dlink 0.6 - -> Dlink was born for Apache Flink, making Flink SQL smoother. - - -- Interactive FlinkSQL Studio -- Deep customization based on Apache Flink -- Real time is the future - -[GitHub](https://github.com/DataLinkDC/dlink) -[Gitee](https://gitee.com/DataLinkDC/dlink) -[Get Started](/en-US/introduce) \ No newline at end of file diff --git a/docs/en-US/_navbar.md b/docs/en-US/_navbar.md deleted file mode 100644 index 68c0c1c259..0000000000 --- a/docs/en-US/_navbar.md +++ /dev/null @@ -1,12 +0,0 @@ -* [Home](/introduce.md) -* Documents - * [master](/introduce.md) -* [Downloads](/quick_start/download.md) -* Developers - * [Participation and contribution](/zh-CN/developer_guide/how_contribute.md) - * [Local debugging](/zh-CN/developer_guide/local_debug.md) - * [Remote debugging](/zh-CN/developer_guide/remote_debug.md) -* User case -* Language - * [:cn:中文](/) - * [:us:English](/en-US/) diff --git a/docs/en-US/_sidebar.md b/docs/en-US/_sidebar.md deleted file mode 100644 index df13487b40..0000000000 --- a/docs/en-US/_sidebar.md +++ /dev/null @@ -1,60 +0,0 @@ - - - -- [About Dinky](/zh-CN/introduce.md) -- Concept and architecture - - [System architecture](/zh-CN/architecture.md) - - [Basic concept](/zh-CN/concept.md) -- [Features](/zh-CN/feature.md) -- Get_starting - - [Compile](/zh-CN/quick_start/build.md) - - [Deploy](/zh-CN/quick_start/deploy.md) -- Basic User Guide -- Reference Manual - - FlinkSQL Studio - - Job and directory creation - - Job development - - Job configuration - - Job Management - - Session management - - Registration Centre - - Cluster instance - - Cluster configuration - - JAR management - - DataSource management - - Document Management - - System setup - - User Management - - Flink Settings - - Operation Center - - Life Cycle Management - - Job Monitoring - - api -- Best Practices - - [Yarn Submission Practice Guide](/zh-CN/practice/yarnsubmit.md) - - [Detailed explanation of the core concept and realization principle of Dlink](/zh-CN/practice/principle.md) - - [Practice of AGGTABLE table value aggregation](/zh-CN/practice/aggtable.md) -- Extend - - Integration - - [Flink-CDC Integration](/zh-CN/extend/flinkcdc.md) - - [Flink-CDC-Kafka multi-source merge](/zh-CN/extend/Flink_CDC_kafka_Multi_source_merger.md) - - [hive Integration](/zh-CN/extend/hive.md) - - [clickhouse Integration](/zh-CN/extend/clickhouse.md) - - [Doris Integration](/zh-CN/extend/doris.md) - - [Hudi Integration](/zh-CN/extend/hudi.md) - - [Iceberg Integration](/zh-CN/extend/iceberg.md) - - [Flink UDF Integration](/zh-CN/extend/udf.md) - - [DolphinScheduler Integration](/zh-CN/extend/dolphinscheduler.md) - - [DataSphereStudio Integration](/zh-CN/extend/dataspherestudio.md) - - Others - - [Extended Flink version](/zh-CN/extend/flinkversion.md) - - [Extension connector](/zh-CN/extend/connector.md) - - [Extended DataSource](/zh-CN/extend/datasource.md) - - [FlinkSQL editor autocompletion function](/zh-CN/extend/completion.md) -- Developer's Guide -- FAQ -- [Thanks](/zh-CN/others/thanks.md) -- [Communication and contribution](/zh-CN/others/comminicate.md) -- [Roadmap](/zh-CN/roadmap.md) - - \ No newline at end of file diff --git a/docs/en-US/api/openapi.md b/docs/en-US/api/openapi.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/en-US/api/openapi.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/en-US/extend/clickhouse.md b/docs/en-US/extend/clickhouse.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/en-US/extend/clickhouse.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/en-US/extend/datasource.md b/docs/en-US/extend/datasource.md deleted file mode 100644 index 148f802fa6..0000000000 --- a/docs/en-US/extend/datasource.md +++ /dev/null @@ -1,3 +0,0 @@ -## 扩展 Metadata - -遵循SPI。 \ No newline at end of file diff --git a/docs/en-US/extend/dataspherestudio.md b/docs/en-US/extend/dataspherestudio.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/en-US/extend/dataspherestudio.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/en-US/extend/dolphinscheduler.md b/docs/en-US/extend/dolphinscheduler.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/en-US/extend/dolphinscheduler.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/en-US/extend/flinkversion.md b/docs/en-US/extend/flinkversion.md deleted file mode 100644 index d415be0861..0000000000 --- a/docs/en-US/extend/flinkversion.md +++ /dev/null @@ -1,5 +0,0 @@ -## 扩展其他版本的 Flink - -Flink 的版本取决于 lib 下的 dlink-client-1.13.jar。当前版本默认为 Flink 1.13.3 API。向其他版本的集群提交任务可能存在问题,已实现 1.11、1.12、1.13, 1.14,切换版本时只需要将对应依赖在lib下进行替换,然后重启即可。 - -切换版本时需要同时更新 plugins 下的 Flink 依赖。 \ No newline at end of file diff --git a/docs/en-US/extend/hive.md b/docs/en-US/extend/hive.md deleted file mode 100644 index f3ccf83757..0000000000 --- a/docs/en-US/extend/hive.md +++ /dev/null @@ -1,89 +0,0 @@ -## 前言 - -最近有很多小伙伴问,dlink 如何连接 Hive 进行数据开发? - -关于 dlink 连接 Hive 的步骤同 Flink 的 `sql-client ` ,只不过它没有默认加载的配置文件。下文将详细讲述对 Hive 操作的全过程。 - -## 准备工作 - -由于搭建 Hive 的开发环境会涉及到重多组件和插件,那其版本对应问题也是至关重要,它能帮我们避免很多不必要的问题,当然小版本号之间具备一定的兼容性。 - -我们先来梳理下本教程的各个组件版本: - -| 组件 | 版本 | -| :----: | :----: | -| Dlink | 0.3.2 | -| Flink | 1.12.4 | -| Hadoop | 2.7.7 | -| Hive | 2.3.6 | -| Mysql | 8.0.15 | - -再来梳理下本教程的各个插件版本: - -| 所属组件 | 插件 | 版本 | -| :-----------: | :------------------------: | :-------------------: | -| Dlink | dlink-client | 1.12 | -| Dlink & Flink | flink-sql-connector-hive | 2.3.6_2.11-1.12.3 | -| Dlink & Flink | flink-shaded-hadoop-3-uber | 3.1.1.7.2.8.0-224-9.0 | - -## 部署扩展 - -部署扩展的工作非常简单(前提是 Dlink 部署完成并成功连接 Flink 集群,相关部署步骤请查看《Dlink实时计算平台——部署篇》),只需要把 `flink-sql-connector-hive-2.3.6_2.11-1.12.3.jar` 和 `flink-shaded-hadoop-3-uber-3.1.1.7.2.8.0-224-9.0.jar` 两个插件分别加入到 Dlink 的 plugins 目录与 Flink 的 lib 目录下即可,然后重启二者。当然,还需要放置 `hive-site.xml`,位置自定义,Dlink 可以访问到即可。 - -## 创建 Hive Catalog - -已知,Hive 已经新建了一个数据库实例 `hdb` ,创建了一张表 `htest`,列为 `name` 和 `age`,存储位置默认为 `hdfs:///usr/local/hadoop/hive-2.3.9/warehouse/hdb.db` 。(此处为何 2.3.9 呢,因为 `flink-sql-connector-hive-2.3.6_2.11-1.12.3.jar` 只支持到最高版本 2.3.6,小编先装了个 2.3.9 后装了个 2.3.6,尴尬 > _ < ~) - -```sql -CREATE CATALOG myhive WITH ( - 'type' = 'hive', - 'default-database' = 'hdb', - 'hive-conf-dir' = '/usr/local/dlink/hive-conf' -); --- set the HiveCatalog as the current catalog of the session -USE CATALOG myhive; -select * from htest -``` - -在 Dlink 编辑器中输入以上 sql ,创建 Hive Catalog,并查询一张表。 - -其中,`hive-conf-dir` 需要指定 `hive-site.xml` 的路径,其他同 Flink 官方解释。 - -执行查询后(记得选中执行配置的预览结果),可以从查询结果中查看到 htest 表中只有一条数据。(这是正确的,因为小编太懒了,只随手模拟了一条数据) - -此时可以使用 FlinkSQL 愉快地操作 Hive 的数据了。 - -## 使用 Hive Dialect - -很熟悉 Hive 的语法以及需要对 Hive 执行其自身特性的语句怎么办? - -同 Flink 官方解释一样,只需要使用 `SET table.sql-dialect=hive` 来启用方言即可。注意有两种方言 `default` 和 `hive` ,它们的使用可以随意切换哦~ - -```sql -CREATE CATALOG myhive WITH ( - 'type' = 'hive', - 'default-database' = 'hdb', - 'hive-conf-dir' = '/usr/local/dlink/hive-conf' -); --- set the HiveCatalog as the current catalog of the session -USE CATALOG myhive; --- set hive dialect -SET table.sql-dialect=hive; --- alter table location -alter table htest set location 'hdfs:///usr/htest'; --- set default dialect -SET table.sql-dialect=default; -select * from htest; -``` - -上述 sql 中添加了 Hive Dialect 的使用,FlinkSQL 本身不支持 `alter table .. set location ..` 的语法,使用 Hive Dialect 则可以实现语法的切换。本 sql 内容对 htest 表进行存储位置的改变,将其更改为一个新的路径,然后再执行查询。 - -由上图可见,被更改过 location 的 htest 此时查询没有数据,是正确的。 - -然后将 location 更改为之前的路径,再执行查询,则可见原来的那条数据,如下图所示。 - -## 总结 - -由上所知,Dlink 以更加友好的交互方式展现了 Flink 集成 Hive 的部分功能,当然其他更多的 Hive 功能需要您自己在使用的过程中去体验与挖掘。 - -目前,Dlink 支持 Flink 绝大多数特性与功能,集成与拓展方式与 Flink 官方文档描述一致,只需要在 Dlink 的 plugins 目录下添加依赖即可。 \ No newline at end of file diff --git a/docs/en-US/extend/hudi.md b/docs/en-US/extend/hudi.md deleted file mode 100644 index c3a5c829bb..0000000000 --- a/docs/en-US/extend/hudi.md +++ /dev/null @@ -1,290 +0,0 @@ -## 背景资料 - -Apache hudi (发音为“ hoodie”)是下一代流式数据湖平台。Apache Hudi 将核心仓库和数据库功能直接引入到数据库中。Hudi 提供表、事务、高效的升级/删除、高级索引、流式摄入服务、数据集群/压缩优化和并发,同时保持数据以开放源码文件格式存储 , Apache Hudi 不仅非常适合流式工作负载,而且它还允许您创建高效的增量批处理管道。 - -实时数仓流批一体已经成为大势所趋。 - -为什么要使用 Hudi ? - -1. 目前业务架构较为繁重 - -2. 维护多套框架 - -3. 数据更新频率较大 - -## 准备&&部署 - -| 组件 | 版本 | 备注 | -| ------------- | ----------------------------------- | ---------- | -| Flink | 1.13.5 | 集成到CM | -| Flink-SQL-CDC | 2.1.1 | | -| Hudi | 0.10.0-patch | 打过补丁的 | -| Mysql | 8.0.13 | 阿里云 | -| Dlink | dlink-release-0.5.0-SNAPSHOT.tar.gz | | -| Scala | 2.12 | | - -### 1. 部署Flink1.13.5 - -flink 集成到CM中 - -此步骤略。 - -### 2. 集成Hudi 0.10.0 - -​ ①. 地址: https://github.com/danny0405/hudi/tree/010-patch 打过补丁的 大佬请忽略^_^ - -​ a. 下载压缩包 分支010-patch 不要下载 master 上传 解压 - -​ b. unzip 010-patch.zip - -​ c. 找到 `packging--hudi-flink-bundle` 下的 `pom.xml`,更改 `flink-bundel-shade-hive2` 下的 `hive-version` 更改为 `2.1.1-chd6.3.2` 的版本。 - -```shell -vim pom.xml # 修改hive版本为 : 2.1.1-cdh6.3.2 -``` - -​ d. 执行编译: - -```shell -mvn clean install -DskipTests -DskipITs -Dcheckstyle.skip=true -Drat.skip=true -Dhadoop.version=3.0.0 -Pflink-bundle-shade-hive2 -Dscala-2.12 -``` - -​ 因为 `chd6.3.0` 使用的是 `hadoop3.0.0` ,所以要指定 `hadoop` 的版本, `hive` 使用的是 `2.1.1` 的版本,也要指定 `hive` 的版本,不然使用 `sync to hive` 的时候,会报类的冲突问题。 `scala` 版本是 `2.12` 。 - -​ 同时 flink 集成到 cm 的时候也是 `scala2.12` 版本统一。 - -编译完成如下图: - -![img](http://www.aiwenmo.com/dinky/hudi/hudill.png) - -②. 把相关应的jar包 放到相对应的目录下 - -```shell -# hudi的包 -ln -s /opt/module/hudi-0.10.0/hudi-hadoop-mr-bundle/target/hudi-hadoop-mr-bundle-0.10.0.jar /opt/cloudera/parcels/CDH/jars/ -ln -s /opt/module/hudi-0.10.0/hudi-hive-sync-bundle/target/hudi-hive-sync-bundle-0.10.0.jar /opt/cloudera/parcels/CDH/jars/ -ln -s /opt/module/hudi-0.10.0/hudi-hive-sync-bundle/target/hudi-hive-sync-bundle-0.10.0.jar /opt/cloudera/parcels/CDH/lib/hive/lib -# 同步sync to hive 每台节点都要放 -cp /opt/module/hudi-0.10.0/hudi-flink-bundle/target/hudi-flink-bundle_2.12-0.10.0.jar /opt/cloudera/parcels/FLINK/lib/flink/lib/ -# 以下三个jar 放到flink/lib 下 否则同步数据到hive的时候会报错 -cp /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-core-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.5/lib/ -cp /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-common-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.5/lib/ -cp /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.5/lib/ -# 执行以下命令 -cd /opt/module/flink-1.13.5/lib/ -scp -r ./* cdh5:`pwd` -scp -r ./* cdh6:`pwd` -scp -r ./* cdh7:`pwd` -``` - - - -### 3. 安装 Dlink-0.5.0 - -a. github 地址: https://github.com/DataLinkDC/dlink - -b. 部署步骤见 github-readme.md 传送门: https://github.com/DataLinkDC/dlink/blob/main/README.md - -ps: 注意 还需要将 `hudi-flink-bundle_2.12-0.10.0.jar` 这个包放到 dlink的 `plugins` 下 。 - -`plugins` 下的包 如下图所示: - -![img](http://www.aiwenmo.com/dinky/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) - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_clustertable.png) - -## 数据表 - -### 1. DDL准备 - -(以下ddl 通过Python程序模板生成 大佬请略过! O(∩_∩)O ) - -```sql -------------- '订单表' order_mysql_goods_order ----------------- -CREATE TABLE source_order_mysql_goods_order ( - `goods_order_id` bigint COMMENT '自增主键id' - , `goods_order_uid` string COMMENT '订单uid' - , `customer_uid` string COMMENT '客户uid' - , `customer_name` string COMMENT '客户name' - , `student_uid` string COMMENT '学生uid' - , `order_status` bigint COMMENT '订单状态 1:待付款 2:部分付款 3:付款审核 4:已付款 5:已取消' - , `is_end` bigint COMMENT '订单是否完结 1.未完结 2.已完结' - , `discount_deduction` bigint COMMENT '优惠总金额(单位:分)' - , `contract_deduction` bigint COMMENT '老合同抵扣金额(单位:分)' - , `wallet_deduction` bigint COMMENT '钱包抵扣金额(单位:分)' - , `original_price` bigint COMMENT '订单原价(单位:分)' - , `real_price` bigint COMMENT '实付金额(单位:分)' - , `pay_success_time` timestamp(3) COMMENT '完全支付时间' - , `tags` string COMMENT '订单标签(1新签 2续费 3扩科 4报名-合新 5转班-合新 6续费-合新 7试听-合新)' - , `status` bigint COMMENT '是否有效(1.生效 2.失效 3.超时未付款)' - , `remark` string COMMENT '订单备注' - , `delete_flag` bigint COMMENT '是否删除(1.否,2.是)' - , `test_flag` bigint COMMENT '是否测试数据(1.否,2.是)' - , `create_time` timestamp(3) COMMENT '创建时间' - , `update_time` timestamp(3) COMMENT '更新时间' - , `create_by` string COMMENT '创建人uid(唯一标识)' - , `update_by` string COMMENT '更新人uid(唯一标识)' - ,PRIMARY KEY(goods_order_id) NOT ENFORCED -) COMMENT '订单表' -WITH ( - 'connector' = 'mysql-cdc' - ,'hostname' = 'rm-bp1t34384933232rds.aliyuncs.com' - ,'port' = '3306' - ,'username' = 'app_kfkdr' - ,'password' = 'CV122fff0E40' - ,'server-time-zone' = 'UTC' - ,'scan.incremental.snapshot.enabled' = 'true' - ,'debezium.snapshot.mode'='latest-offset' -- 或者key是scan.startup.mode,initial表示要历史数据,latest-offset表示不要历史数据 - ,'debezium.datetime.format.date'='yyyy-MM-dd' - ,'debezium.datetime.format.time'='HH-mm-ss' - ,'debezium.datetime.format.datetime'='yyyy-MM-dd HH-mm-ss' - ,'debezium.datetime.format.timestamp'='yyyy-MM-dd HH-mm-ss' - ,'debezium.datetime.format.timestamp.zone'='UTC+8' - ,'database-name' = 'order' - ,'table-name' = 'goods_order' - -- ,'server-id' = '2675788754-2675788754' -); -CREATE TABLE sink_order_mysql_goods_order( - `goods_order_id` bigint COMMENT '自增主键id' - , `goods_order_uid` string COMMENT '订单uid' - , `customer_uid` string COMMENT '客户uid' - , `customer_name` string COMMENT '客户name' - , `student_uid` string COMMENT '学生uid' - , `order_status` bigint COMMENT '订单状态 1:待付款 2:部分付款 3:付款审核 4:已付款 5:已取消' - , `is_end` bigint COMMENT '订单是否完结 1.未完结 2.已完结' - , `discount_deduction` bigint COMMENT '优惠总金额(单位:分)' - , `contract_deduction` bigint COMMENT '老合同抵扣金额(单位:分)' - , `wallet_deduction` bigint COMMENT '钱包抵扣金额(单位:分)' - , `original_price` bigint COMMENT '订单原价(单位:分)' - , `real_price` bigint COMMENT '实付金额(单位:分)' - , `pay_success_time` timestamp(3) COMMENT '完全支付时间' - , `tags` string COMMENT '订单标签(1新签 2续费 3扩科 4报名-合新 5转班-合新 6续费-合新 7试听-合新)' - , `status` bigint COMMENT '是否有效(1.生效 2.失效 3.超时未付款)' - , `remark` string COMMENT '订单备注' - , `delete_flag` bigint COMMENT '是否删除(1.否,2.是)' - , `test_flag` bigint COMMENT '是否测试数据(1.否,2.是)' - , `create_time` timestamp(3) COMMENT '创建时间' - , `update_time` timestamp(3) COMMENT '更新时间' - , `create_by` string COMMENT '创建人uid(唯一标识)' - , `update_by` string COMMENT '更新人uid(唯一标识)' - ,PRIMARY KEY (goods_order_id) NOT ENFORCED -) COMMENT '订单表' -WITH ( - 'connector' = 'hudi' - , 'path' = 'hdfs://cluster1/data/bizdata/cdc/mysql/order/goods_order' -- 路径会自动创建 - , 'hoodie.datasource.write.recordkey.field' = 'goods_order_id' -- 主键 - , 'write.precombine.field' = 'update_time' -- 相同的键值时,取此字段最大值,默认ts字段 - , 'read.streaming.skip_compaction' = 'true' -- 避免重复消费问题 - , 'write.bucket_assign.tasks' = '2' -- 并发写的 bucekt 数 - , 'write.tasks' = '2' - , 'compaction.tasks' = '1' - , 'write.operation' = 'upsert' -- UPSERT(插入更新)\INSERT(插入)\BULK_INSERT(批插入)(upsert性能会低些,不适合埋点上报) - , 'write.rate.limit' = '20000' -- 限制每秒多少条 - , 'table.type' = 'COPY_ON_WRITE' -- 默认COPY_ON_WRITE , - , 'compaction.async.enabled' = 'true' -- 在线压缩 - , 'compaction.trigger.strategy' = 'num_or_time' -- 按次数压缩 - , 'compaction.delta_commits' = '20' -- 默认为5 - , 'compaction.delta_seconds' = '60' -- 默认为1小时 - , 'hive_sync.enable' = 'true' -- 启用hive同步 - , 'hive_sync.mode' = 'hms' -- 启用hive hms同步,默认jdbc - , 'hive_sync.metastore.uris' = 'thrift://cdh2.vision.com:9083' -- required, metastore的端口 - , 'hive_sync.jdbc_url' = 'jdbc:hive2://cdh1.vision.com:10000' -- required, hiveServer地址 - , 'hive_sync.table' = 'order_mysql_goods_order' -- required, hive 新建的表名 会自动同步hudi的表结构和数据到hive - , 'hive_sync.db' = 'cdc_ods' -- required, hive 新建的数据库名 - , 'hive_sync.username' = 'hive' -- required, HMS 用户名 - , 'hive_sync.password' = '123456' -- required, HMS 密码 - , 'hive_sync.skip_ro_suffix' = 'true' -- 去除ro后缀 -); ----------- source_order_mysql_goods_order=== TO ==>> sink_order_mysql_goods_order ------------ - insert into sink_order_mysql_goods_order select * from source_order_mysql_goods_order; -``` - -## 调试 - -### 1.对上述SQL执行语法校验: - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_explainsql.png) - -### 2. 获取JobPlan - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_jobplan.png) - -### 3. 执行任务 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_executesql.png) - -### 4. dlink 查看执行的任务 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_process.png) - -### 5. Flink-webUI 查看 作业 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_flink.png) - -### 6. 查看hdfs路径下数据 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_hdfs.png) - -### 7. 查看hive表: - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_hive.png) - -查看订单号对应的数据 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_hivedata.png) - -### 8.更新数据操作 - -​ - -```sql - UPDATE `order`.`goods_order` - SET - `remark` = 'cdc_test update' - WHERE - `goods_order_id` = 73270; -``` - -再次查看 hive 数据 发现已经更新 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_hiveupdate.png) - -### 9.删除数据操作 - -(内部业务中采用逻辑删除 不使用物理删除 此例仅演示/测试使用 谨慎操作) - -```sql - delete from `order`.`goods_order` where goods_order_id='73270'; -``` - - - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_hivedelete.png) - -### 10.将此数据再次插入 - -​ - -```sql -INSERT INTO `order`.`goods_order`(`goods_order_id`, `goods_order_uid`, `customer_uid`, `customer_name`, `student_uid`, `order_status`, `is_end`, `discount_deduction`, `contract_deduction`, `wallet_deduction`, `original_price`, `real_price`, `pay_success_time`, `tags`, `status`, `remark`, `delete_flag`, `test_flag`, `create_time`, `update_time`, `create_by`, `update_by`) VALUES (73270, '202112121667480848077045760', 'VA100002435', 'weweweywu', 'S100002435', 4, 1, 2000000, 0, 0, 2000000, 0, '2021-12-12 18:51:41', '1', 1, '', 1, 1, '2021-12-12 18:51:41', '2022-01-10 13:53:59', 'VA100681', 'VA100681'); -``` - -再次查询hive数据 数据正常进入。 - -![img](http://www.aiwenmo.com/dinky/hudi/hudi_hiveinsert.png) - -至此 Dlink在Flink-SQL-CDC 到Hudi Sync Hive 测试结束 - -## 结论 - -通过 Dlink + Flink-Mysql-CDC + Hudi 的方式大大降低了我们流式入湖的成本,其中 Flink-Mysql-CDC 简化了CDC的架构与成本,而 Hudi 高性能的读写更有利于变动数据的存储,最后 Dlink 则将整个数据开发过程 sql 平台化,使我们的开发运维更加专业且舒适,期待 Dlink 后续的发展。 - - -## 作者 -zhumingye \ No newline at end of file diff --git a/docs/en-US/extend/iceberg.md b/docs/en-US/extend/iceberg.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/en-US/extend/iceberg.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/en-US/extend/udf.md b/docs/en-US/extend/udf.md deleted file mode 100644 index abb0cf9098..0000000000 --- a/docs/en-US/extend/udf.md +++ /dev/null @@ -1,3 +0,0 @@ -## 扩展 UDF - -将 Flink 集群上已扩展好的 UDF 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 UDF 过程同 Flink 官方一样。 diff --git a/docs/en-US/guide/debug.md b/docs/en-US/guide/debug.md deleted file mode 100644 index a9a8b1b092..0000000000 --- a/docs/en-US/guide/debug.md +++ /dev/null @@ -1,288 +0,0 @@ -## 前言 - -最近小伙伴们一直追问,如何在 IDEA 里去调试 Dlink。本文将指导大家可以成功地搭建调试环境并可以修改相关功能的代码,当然欢迎大家将相关问题修复及新功能的实现贡献到 dev 分支哦。那一起来看看吧! - -## 准备 - -首先,请从 GitHub 中拉取 Dlink 源码,例如: - -```bash -git clone https://github.com/DataLinkDC/dlink.git -``` - -## IntelliJ IDEA - -该指南介绍了关于如何设置 IntelliJ IDEA 来进行 Dlink 前后端开发。Eclipse 不建议使用。 - -以下文档描述了 IntelliJ IDEA 2021.3 (https://www.jetbrains.com/idea/download/) 的设置步骤以及 Dlink 的导入步骤。 - -所以以下简称 IDEA 来表示 IntelliJ IDEA 。 - -### 安装 Lombok 插件 - -IDEA 提供了插件设置来安装 Lombok 插件。如果尚未安装,请在导入 Dlink 之前按照以下说明来进行操作以启用对 Lombok 注解的支持: - -1. 转到 IDEA Settings → Plugins 并选择 Marketplace 。 -2. 选择并安装 Lombok 插件。 -3. 如果出现提示,请重启 IDEA 。 - -### 导入 Dlink - -1. 启动 IDEA 并选择 Open。 -2. 选择已克隆的 Dlink 存储库的根文件夹。 -3. 等待项目加载完成。 -4. 设置 JDK 1.8 和 Maven 3.6.0。 - -## 前端环境 - -### 安装 npm - -可用版本 7.19.0,安装步骤详情百度。 - -### 安装 node.js - -可用版本 14.17.0,安装步骤详情百度。 - -### 初始化依赖 - -```bash -npm install --force -``` - -## 编译项目 - -### 编译 - -IDEA 里 Build → Build Project 。 - -### 打包 - -```bash -mvn clean install -Dmaven.test.skip=true -``` - -打包最终位于根目录 build 下,`dlink-release-0.5.0-SNAPSHOT.tar.gz` 其大小约为 40 M。 - -### 问题 - -如果在打包 dlink-web 过程失败,请先单独打包前端进行问题排查。 - -```bash -npm build -``` - -## 修改 pom - -### dlink-core.pom - -```xml - - com.dlink - dlink-client-1.13 - provided - - - com.dlink - dlink-executor - provided - - - com.dlink - dlink-connector-jdbc-1.13 - provided - - - com.dlink - dlink-function - provided - - - com.dlink - dlink-gateway - provided - -``` - -把上述依赖的 scope 注释掉。 - -### dlink-admin.pom - -可在该 pom 下按功能添加其他 Dlink 子组件依赖以及 Flink 和 Hadoop 的第三方依赖。 - -如使用 ClickHouse 数据源及元数据功能,则添加以下内容: - -```xml - - com.dlink - dlink-metadata-clickhouse - 0.5.0-SNAPSHOT - -``` - -如使用 Flink Hive 等其他连接器功能,则需要添加相关依赖。 - -## 修改配置文件 - -### application.yml - -配置数据库连接信息: - -```yaml -spring: - datasource: - url: jdbc:mysql://127.0.0.1:3306/dlink?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - username: dlink - password: dlink - driver-class-name: com.mysql.cj.jdbc.Driver -``` - -## 初始化数据库 - -创建 dlink 用户并在 dlink 数据库中执行 dlink-doc/sql/dlink.sql 文件。 - -此外 dlink-doc/sql/dlink_history.sql 标识了各版本的升级 sql。 - -## 启动后端服务 - -启动 dlink-admin 下的 Dlink 启动类,可见 8888 端口。 - -## 启动前端服务 - -```bash -npm start -``` - -等待几分钟,访问 127.0.0.1:8000 可见登录页。 - -输入 admin/admin 登录。 - -## 源码结构 - -```java -dlink -- 父项目 -|-dlink-admin -- 管理中心 -|-dlink-app -- Application Jar -|-dlink-assembly -- 打包配置 -|-dlink-client -- Client 中心 -| |-dlink-client-1.11 -- Client-1.11 实现 -| |-dlink-client-1.12 -- Client-1.12 实现 -| |-dlink-client-1.13 -- Client-1.13 实现 -| |-dlink-client-1.14 -- Client-1.14 实现 -|-dlink-common -- 通用中心 -|-dlink-connectors -- Connectors 中心 -| |-dlink-connector-jdbc -- Jdbc 扩展 -|-dlink-core -- 执行中心 -|-dlink-doc -- 文档 -| |-bin -- 启动脚本 -| |-bug -- bug 反馈 -| |-config -- 配置文件 -| |-doc -- 使用文档 -| |-sql -- sql脚本 -|-dlink-executor -- 执行中心 -|-dlink-extends -- 扩展中心 -|-dlink-function -- 函数中心 -|-dlink-gateway -- Flink 网关中心 -|-dlink-metadata -- 元数据中心 -| |-dlink-metadata-base -- 元数据基础组件 -| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现 -| |-dlink-metadata-mysql -- 元数据- mysql 实现 -| |-dlink-metadata-oracle -- 元数据- oracle 实现 -| |-dlink-metadata-postgresql -- 元数据- postgresql 实现 -|-dlink-web -- React 前端 -|-docs -- 官网文档 -``` - -### dlink-admin - -Dlink 的管理中心,标准的 SpringBoot 应用,负责与前端 react 交互。 - -### dlink-app - -Dlink 在 Yarn Application 模式所使用的简化解析包。 - -### dlink-assembly - -项目打包配置,管理了最终 tar.gz 的打包内容。 - -### dlink-client - -Dlink 定制的 Flink 运行环境的实现。用来桥接 Dlink 与不同版本的 Flink 运行环境。 - -### dlink-common - -Dlink 的子项目的公用类及实现项目。 - -### dlink-connectors - -Dlink 的 Connectors,目前实现了 Oracle、Clickhouse、SQLServer。此外 Dlink 可以直接使用 Flink 的所有连接器,在确保依赖不冲突的情况下。 - -### dlink-core - -Dlink 的核心模块,内包含 Flink RestAPI 、集群、SQL解释器、Job统一调度器(JobManager)、会话管理等实现。 - -### dlink-doc - -此模块为打包所需的资源模块,包含启动脚本、sql脚本、配置文件等。 - -### dlink-executor - -Dlink 的执行模块,是从 dlink-core 中拆分出来,内含最核心的 Executor、Interceptor、Operation 等实现。 - -### dlink-extends - -存放 Dlink 扩展其他生态的组件。 - -### dlink-function - -Dlink 所额外提供的 Flink 各种自定义函数。 - -### dlink-gateway - -Dlink 的任务网关,负责把实现不同执行模式的任务提交与管理,目前主要包含 Yarn PerJob 和 Application。 - -### dlink-metadata - -Dlink 的元数据中心,用于实现各种外部数据源对接到 Dlink,以此使用其各种查询、执行等能力。未来用于 Flink Catalog 的预装载等。 - -### dlink-web - -Dlink 的前端项目,基于 Ant Design Pro 5.0.0。Why Not Vue ? React Who Use Who Know。(中式英语 =。=) - -Dlink 的前端架构与开发后续文章会详解,本文略。 - -### docs - -Dlink 的官网实现,大佬们可以修改或贡献 markdown。多多分享,让社区发展更快,十分感谢。 - -## 任务执行路线 - -同步执行:三角号按钮。 - -异步提交:小火箭按钮。 - -### Local - -同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> LocalStreamExecutor ==> CustomTableEnvironmentImpl ==> LocalEnvironment - -### Standalone - -注册集群实例 ==> 同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> RemoteStreamExecutor ==> CustomTableEnvironmentImpl ==> RemoteEnvironment ==> JobGraph ==> Flink Standalone Cluster - -### Yarn Session - -注册集群实例 ==> 同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> RemoteStreamExecutor ==> CustomTableEnvironmentImpl ==> RemoteEnvironment ==> JobGraph ==> Flink Yarn Session Cluster - -### Yarn Per-Job - -注册集群配置 ==> 异步提交 ==> StudioService ==> JobManager ==> Executor ==> JobGraph ==> Gateway ==> YarnPerJobGateway==> YarnClient ==> Flink Yarn Per-Job Cluster - -### Yarn Application - -注册集群配置 ==> 异步提交 ==> StudioService ==> JobManager ==> Executor ==> TaskId & JDBC ==> Gateway ==> YarnApplicationGateway==> YarnClient ==> dlink-app.jar ==> Executor ==> AppStreamExecutor ==> CustomTableEnvironmentImpl ==> LocalEnvironmentFlink Yarn Application Cluster - -## 总结 - -以为内容为大家带来了 Dlink 的基本功能 IDEA 部署调试步骤,并简单介绍了各模块的作用,也清晰的描述了各执行模式下 FlinkSQL 实现免 Jar 提交的代码思路。在了解以上内容后,相信大家已经可以动手改造 Dlink 了,欢迎大家及时加入 Dlink 社区成为核心贡献者,共建共赢。 - -后续文章将指引大家如何快速拓展 Dlink 的功能组件,敬请期待。 - diff --git a/docs/en-US/guide/deploy.md b/docs/en-US/guide/deploy.md deleted file mode 100644 index f4bc5bc912..0000000000 --- a/docs/en-US/guide/deploy.md +++ /dev/null @@ -1,153 +0,0 @@ -### 从安装包开始 - -Dlink 可以部署在 Flink 及 Hadoop 集群之外的任意节点,只要网络通就可;部署在集群内部也可。 - -``` -config/ -- 配置文件 -|- application.yml -extends/ -- 扩展 -|- dlink-client-1.11.jar -|- dlink-client-1.12.jar -|- dlink-client-1.14.jar -html/ -- 前端编译产物,用于Nginx -jar/ -- dlink application模式提交sql用到的jar -lib/ -- 内部组件 -|- dlink-client-1.13.jar -- 必需 -|- dlink-connector-jdbc.jar -|- dlink-function.jar -|- dlink-metadata-clickhouse.jar -|- dlink-metadata-mysql.jar -|- dlink-metadata-oracle.jar -|- dlink-metadata-postgresql.jar -plugins/ -|- flink-connector-jdbc_2.11-1.13.3.jar -|- flink-csv-1.13.3.jar -|- flink-dist_2.11-1.13.3.jar -|- flink-json-1.13.3.jar -|- flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar -|- flink-shaded-zookeeper-3.4.14.jar -|- flink-table-blink_2.11-1.13.3.jar -|- flink-table_2.11-1.13.3.jar -|- mysql-connector-java-8.0.21.jar -sql/ -|- dlink.sql --Mysql初始化脚本 -auto.sh --启动停止脚本 -dlink-admin.jar --程序包 -``` - -解压后结构如上所示,修改配置文件内容。lib 文件夹下存放 dlink 自身的扩展文件,plugins 文件夹下存放 flink 及 hadoop 的官方扩展文件。其中 plugins 中的所有 jar 需要根据版本号自行下载并添加,才能体验完整功能,当然也可以放自己修改的 Flink 源码编译包。当然,如果您硬要使用 FLINK_HOME 的话,可以在 `auto.sh` 文件中 `SETTING` 变量添加`$FLINK_HOME/lib` 。extends 文件夹只作为扩展插件的备份管理,不会被 dlink 加载。 - -在Mysql数据库中创建数据库并执行初始化脚本。 - -执行以下命令管理应用。 - -```shell -sh auto.sh start -sh auto.sh stop -sh auto.sh restart -sh auto.sh status -``` - -前端 Nginx 部署: -将 html 文件夹上传至 nginx 的 html 文件夹下,修改 nginx 配置文件并重启。如果 Nginx 和 Dlink 在同一节点,则可以指定静态资源的绝对路径到 Dlink 的 html 目录。 - -```shell - server { - listen 9999; - server_name localhost; - - # gzip config - gzip on; - gzip_min_length 1k; - gzip_comp_level 9; - gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; - gzip_vary on; - gzip_disable "MSIE [1-6]\."; - - #charset koi8-r; - - #access_log logs/host.access.log main; - - location / { - root html; - index index.html index.htm; - try_files $uri $uri/ /index.html; - } - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root html; - } - - location ^~ /api { - proxy_pass http://127.0.0.1:8888; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Real-IP $remote_addr; - } - } -``` - -1. server.listen 填写前端访问端口,例如 9999 -2. proxy_pass 填写后端地址如 http://127.0.0.1:8888 -3. 将 html 文件夹下打包好的前端资源上传到 nginx 的 html 文件夹中 -4. 重载配置文件:nginx -s reload -5. 直接访问前端端口,例如 9999 - -### 从源码编译 - -#### 项目目录 - -```java -dlink -- 父项目 -|-dlink-admin -- 管理中心 -|-dlink-app -- Application Jar -|-dlink-assembly -- 打包配置 -|-dlink-client -- Client 中心 -| |-dlink-client-1.11 -- Client-1.11 实现 -| |-dlink-client-1.12 -- Client-1.12 实现 -| |-dlink-client-1.13 -- Client-1.13 实现 -| |-dlink-client-1.14 -- Client-1.14 实现 -|-dlink-common -- 通用中心 -|-dlink-connectors -- Connectors 中心 -| |-dlink-connector-jdbc -- Jdbc 扩展 -|-dlink-core -- 执行中心 -|-dlink-doc -- 文档 -| |-bin -- 启动脚本 -| |-bug -- bug 反馈 -| |-config -- 配置文件 -| |-doc -- 使用文档 -| |-sql -- sql脚本 -|-dlink-executor -- 执行中心 -|-dlink-extends -- 扩展中心 -|-dlink-function -- 函数中心 -|-dlink-gateway -- Flink 网关中心 -|-dlink-metadata -- 元数据中心 -| |-dlink-metadata-base -- 元数据基础组件 -| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现 -| |-dlink-metadata-mysql -- 元数据- mysql 实现 -| |-dlink-metadata-oracle -- 元数据- oracle 实现 -| |-dlink-metadata-postgresql -- 元数据- postgresql 实现 -|-dlink-web -- React 前端 -|-docs -- 官网 md -``` - -#### 编译打包 - -以下环境版本实测编译成功: - -| 环境 | 版本 | -| :-----: | :-------: | -| npm | 7.19.0 | -| node.js | 14.17.0 | -| jdk | 1.8.0_201 | -| maven | 3.6.0 | -| lombok | 1.18.16 | -| mysql | 5.7+ | - -```shell -mvn clean install -Dmaven.test.skip=true -``` diff --git a/docs/en-US/guide/functions.md b/docs/en-US/guide/functions.md deleted file mode 100644 index 46ea84c9d4..0000000000 --- a/docs/en-US/guide/functions.md +++ /dev/null @@ -1,121 +0,0 @@ -#### 登录 - -超级管理员:admin/admin; - -新增用户:默认密码 123456。 - -#### 集群中心 - -注册 Flink 集群地址时,格式为 host:port ,用英文逗号分隔。即添加 Flink 集群的 JobManager 的 RestApi 地址。当 HA 模式时,地址间用英文逗号分隔,例如:192.168.123.101:8081,192.168.123.102:8081,192.168.123.103:8081。新增和修改的等待时间较长,是因为需要检测最新的 JobManager 地址。心跳检测为手动触发,会更新集群状态与 JobManager 地址。 - -#### Studio - -1. 在左侧目录区域创建文件夹或任务。 -2. 在中间编辑区编写 FlinkSQL 。 -3. 在右侧配置作业配置和执行参数。 -4. Fragment 开启后,可以使用增强的 sql 片段语法: - -```sql -sf:=select * from;tb:=student; -${sf} ${tb} -##效果等同于 -select * from student -``` - -5. 内置 sql 增强语法-表值聚合: - -```sql -CREATE AGGTABLE aggdemo AS -SELECT myField,value,rank -FROM MyTable -GROUP BY myField -AGG BY TOP2(value) as (value,rank); -``` - -6. MaxRowNum 为批流(Session模式下)执行Select时预览查询结果的最大集合长度,默认 100,最大 9999。 -7. SavePoint策略支持最近一次、最早一次、指定一次三种策略。 -8. Flink 共享会话共享 Catalog ,会话的使用需要在左侧会话选项卡手动创建并维护。 -9. 连接器为 Catalog 里的表信息,清空按钮会销毁当前会话。 -10. Local 模式主要用于语法校验、血缘分析、执行图预览等功能,当然也可执行任务,但目前版本建议请使用远程集群来执行任务。 -11. 执行 SQL 时,如果您选中了部分 SQL,则会执行选中的内容,否则执行全部内容。 -12. 小火箭的提交功能是异步提交当前任务已保存的 FlinkSQL 及配置到集群。由于适用于快速提交稳定的任务,所以无法提交草稿,且无法预览数据。 -13. 执行信息或者历史中那个很长很长的就是集群上的 JobId 或者 APPID,任务历史可以查看执行过的任务的数据回放。 -14. 草稿是无法被异步远程提交的,只能同步执行,且无法保存。 -15. Studio 的布局可以随意拖动,但由于是实时计算,联动较多,请温柔些。 -16. 同步执行时可以自由指定任务名,异步提交默认为作业名。 -17. 支持 set 语法设置 Flink 的执行配置,其优先级大于右侧的配置。 -18. 支持远程集群查看、SavePoint 及停止任务。 -19. 支持自定义及上下文的 sql 函数或片段的自动补全,通过函数文档维护。 -20. 支持 Flink 所有官方的连接器及插件的扩展,但需注意版本号适配。 -21. 使用 IDEA 进行源码调试时,需要在 admin 及 core 下修改相应 pom 依赖的引入来完成功能的加载。 -22. 支持基于 StreamGraph 的可执行 FlinkSql (Insert into)的血缘分析,无论你的 sql 有多复杂或者多 view。 -23. Dlink 目前提交方式支持 Standalone 、Yarn Session、Yarn PerJob、Yarn Application,K8S 后续支持。 -24. Dlink 目前对于 Flink 多版本的支持只能一个 Dlink 实例支持一个 Flink 版本,未来将开源同时支持多版本的能力。 -25. 使用 Yarn PerJob、Yarn Application 需要配置集群配置,且其自动注册的集群实例需要手动点击回收。 -26. 其他内容后续更新。。。 - -## 运行截图 - -> 登录页 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/login.png) - -> 首页 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/welcome.png) - -> Studio SQL 开发提示与补全 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/sqldev.png) - -> Studio 语法和逻辑检查 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/sqlcheck.png) - -> Studio 批流SELECT预览 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/selectpreview.png) - -> Studio 异常反馈 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/sqlerror.png) - -> Studio 进程监控 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/process.png) - -> Studio 执行历史 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/history.png) - -> Studio 数据回放 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/datashow.png) - -> Studio SavePoint 管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/savepoint.png) - -> Studio 血缘分析 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/ca.png) - -> Studio 函数浏览 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/function.png) - -> Studio 共享会话 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/session.png) - -> 集群管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/cluster.png) - -> 集群配置管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/clusterconfiguration.png) - -> 数据源管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/db.png) diff --git a/docs/en-US/guide/quickstart.md b/docs/en-US/guide/quickstart.md deleted file mode 100644 index 183f65c711..0000000000 --- a/docs/en-US/guide/quickstart.md +++ /dev/null @@ -1,176 +0,0 @@ -## 简介 - -实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑,并致力于实时计算平台建设。 - -Dinky 架构于 Apache Flink,增强 Flink 的应用与体验,探索流式数仓。即站在巨人肩膀上创新与实践,Dinky 在未来批流一体的发展趋势下潜力无限。 - -最后,Dinky 的发展皆归功于 Apache Flink 等其他优秀的开源项目的指导与成果。 - -## 由来 - -Dinky(原 Dlink): - -1.Dinky 英译为 “ 小巧而精致的 ” ,最直观的表明了它的特征:轻量级但又具备复杂的大数据开发能力。 - -2.为 “ Data Integrate No Knotty ” 的首字母组合,英译 “ 数据整合不难 ”,寓意 “ 易于建设批流一体平台及应用 ”。 - -3.从 Dlink 改名为 Dinky 过渡平滑,更加形象的阐明了开源项目的目标,始终指引参与者们 “不忘初心,方得始终 ”。 - -## 原理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/main/dinky_principle.png) - -### JobManager - -JobManager 作为 Dinky 的作业管理的统一入口,负责 Flink 的各种作业执行方式及其他功能的调度。 - -### Executor - -Executor 是 Dinky 定制的 FlinkSQL 执行器,来模拟真实的 Flink 执行环境,负责 FlinkSQL 的 Catalog 管理、UDF管理、片段管理、配置管理、语句集管理、语法校验、逻辑验证、计划优化、生成 JobGraph、本地执行、远程提交、SELECT 及 SHOW 预览等核心功能。 - -### Interceptor - -Interceptor 是 Dinky 的 Flink 执行拦截器,负责对其进行片段解析、UDF注册、SET 和 AGGTABLE 等增强语法解析。 - -### Gateway - -Gateway 并非是开源项目 flink-sql-gateway,而是 Dinky 自己定制的 Gateway,负责进行基于 Yarn 环境的任务提交与管理,主要有Yarn-Per-Job 和 Yarn-Application 的 FlinkSQL 提交、停止、SavePoint 以及配置测试,而 User Jar 目前只开放了 Yarn-Application 的提交。 - -### Flink SDK - -Dinky 主要通过调用 flink-client 和 flink-table 模块进行二次开发。 - -### Yarn SDK - -Dinky 通过调用 flink-yarn 模块进行二次开发。 - -### Flink API - -Dinky 也支持通过调用 JobManager 的 RestAPI 对任务进行管理等操作,系统配置可以控制开启和停用。 - -### Yarn-Session - -Dinky 通过已注册的 Flink Session 集群实例可以对 Standalone 和 Yarn-Session 两种集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。 - -### Yarn-Per-Job - -Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例,然后将本地解析生产的 JobGraph 与 Configuration 提交至 Yarn 来创建 Flink-Per-Job 应用。 - -### Yarn-Application - -Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对于 User Jar,将 Jar 相关配置与 Configuration 提交至 Yarn 来创建 Flink-Application 应用;对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和 dlink-app.jar 以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。 - -## 功能 - -注意:以下功能均为对应版本已实现的功能,实测可用。 - -| 应用 | 方向 | 功能 | 进展 | -|:-------:|:----------:|-------------------------------------------|:-----:| -| 开发中心 | FlinkSQL | 支持 sql-client 所有语法 | 0.4.0 | -| | | 支持 Flink 所有 Configuration | 0.4.0 | -| | | 支持 Flink 所有 Connector | 0.4.0 | -| | | 支持 SELECT、SHOW 等查询实时预览 | 0.4.0 | -| | | 支持 INSERT 语句集 | 0.4.0 | -| | | 新增 SQL 片段语法 | 0.4.0 | -| | | 新增 AGGTABLE 表值聚合语法及 UDATF 支持 | 0.4.0 | -| | | 新增 CDCSOURCE 多源合并语法支持 | 0.6.0 | -| | | 新增 FlinkSQLEnv 执行环境复用 | 0.5.0 | -| | | 新增 Flink Catalog 交互查询 | 0.4.0 | -| | | 新增 执行环境的共享与私有会话机制 | 0.4.0 | -| | | 新增 多种方言的作业目录管理(FlinkSQL、SQL、Java) | 0.5.0 | -| | | 新增 作业配置与执行配置管理 | 0.4.0 | -| | | 新增 基于 Explain 的语法校验与逻辑解析 | 0.4.0 | -| | | 新增 JobPlan 图预览 | 0.5.0 | -| | | 新增 基于 StreamGraph 的表级血缘分析 | 0.4.0 | -| | | 新增 基于上下文元数据自动提示与补全 | 0.4.0 | -| | | 新增 自定义规则的自动提示与补全 | 0.4.0 | -| | | 新增 关键字高亮与代码缩略图 | 0.4.0 | -| | | 新增 选中片段执行 | 0.4.0 | -| | | 新增 布局拖拽 | 0.4.0 | -| | | 新增 SQL导出 | 0.5.0 | -| | | 新增 快捷键保存、校验、美化 | 0.5.0 | -| | | 支持 local 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 standalone 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 yarn session 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 yarn per-job 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 yarn application 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 kubernetes session 模式下 FlinkSQL 提交 | 0.5.0 | -| | | 支持 kubernetes application 模式下 FlinkSQL 提交 | 0.5.0 | -| | | 支持 UDF Java 方言Local模式在线编写、调试、动态加载 | 0.5.0 | -| | Flink 作业 | 支持 yarn application 模式下 Jar 提交 | 0.4.0 | -| | | 支持 k8s application 模式下 Jar 提交 | 0.5.0 | -| | | 支持 作业 Cancel | 0.4.0 | -| | | 支持 作业 SavePoint 的 Cancel、Stop、Trigger | 0.4.0 | -| | | 新增 作业自动从 SavePoint 恢复机制(包含最近、最早、指定一次) | 0.4.0 | -| | Flink 集群 | 支持 查看已注册集群的作业列表与运维 | 0.4.0 | -| | | 新增 自动注册 Yarn 创建的集群 | 0.4.0 | -| | SQL | 新增 外部数据源的 SQL 校验 | 0.5.0 | -| | | 新增 外部数据源的 SQL 执行与预览 | 0.5.0 | -| | BI | 新增 折线图的渲染 | 0.5.0 | -| | | 新增 条形图图的渲染 | 0.5.0 | -| | | 新增 饼图的渲染 | 0.5.0 | -| | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 | -| | | 新增 FlinkSQL 和 SQL 的自动生成 | 0.6.0 | -| | 归档 | 新增 执行与提交历史 | 0.4.0 | -| 运维中心 | 暂无 | 暂无 | 0.4.0 | -| 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 | -| | | 新增 外部 Flink 集群实例心态检测与版本获取 | 0.4.0 | -| | | 新增 外部 Flink 集群手动一键回收 | 0.4.0 | -| | Flink 集群配置 | 新增 Flink On Yarn 集群配置注册及测试 | 0.4.0 | -| | User Jar | 新增 外部 User Jar 注册 | 0.4.0 | -| | 数据源 | 新增 Mysql 数据源注册及测试 | 0.4.0 | -| | | 新增 Oracle 数据源注册及测试 | 0.4.0 | -| | | 新增 postgreSql 数据源注册及测试 | 0.4.0 | -| | | 新增 ClickHouse 数据源注册及测试 | 0.4.0 | -| OpenApi | 调度 | 新增 submitTask 调度接口 | 0.5.0 | -| | FlinkSQL | 新增 executeSql 提交接口 | 0.5.0 | -| | | 新增 explainSql 验证接口 | 0.5.0 | -| | | 新增 getJobPlan 计划接口 | 0.5.0 | -| | | 新增 getStreamGraph 计划接口 | 0.5.0 | -| | | 新增 getJobData 数据接口 | 0.5.0 | -| | Flink | 新增 executeJar 提交接口 | 0.5.0 | -| | | 新增 cancel 停止接口 | 0.5.0 | -| | | 新增 savepoint 触发接口 | 0.5.0 | -| 关于 | 关于 Dinky | 版本更新记录 | 0.4.0 | - -## 近期计划 - -1.任务生命周期管理 - -2.作业监控及运维 - -3.流作业自动恢复 - -4.作业日志查看 - -5.钉钉报警和推送 - -## 致谢 - -[Apache Flink](https://github.com/apache/flink) - -[Mybatis Plus](https://github.com/baomidou/mybatis-plus) - -[ant-design-pro](https://github.com/ant-design/ant-design-pro) - -[Monaco Editor](https://github.com/Microsoft/monaco-editor) - -[SpringBoot]() - -[docsify](https://github.com/docsifyjs/docsify/) - -此外,感谢 [JetBrains](https://www.jetbrains.com/?from=dlink) 提供的免费开源 License 赞助 - -[![JetBrains](https://github.com/DataLinkDC/dlink/raw/main/dlink-doc/images/main/jetbrains.svg)](https://www.jetbrains.com/?from=dlink) - -## 交流与贡献 - -欢迎您加入社区交流分享,也欢迎您为社区贡献自己的力量。 - -在此非常感谢大家的支持~ - -QQ社区群:**543709668**,申请备注 “ Dinky ”,不写不批 - -微信社区群(推荐):添加微信号 wenmo_ai 邀请进群,申请备注 “ Dinky + 企业名 + 职位”,不写不批 - -公众号(最新消息获取建议关注):[DataLink数据中台](https://mmbiz.qpic.cn/mmbiz_jpg/dyicwnSlTFTp6w4PuJruFaLV6uShCJDkzqwtnbQJrQ90yKDuuIC8tyMU5DK69XZibibx7EPPBRQ3ic81se5UQYs21g/0?wx_fmt=jpeg) \ No newline at end of file diff --git a/docs/en-US/introduce.md b/docs/en-US/introduce.md deleted file mode 100644 index cebef982b1..0000000000 --- a/docs/en-US/introduce.md +++ /dev/null @@ -1,15 +0,0 @@ -## Dinky Introduce -Real Time is the future, Dinky was created for Apache Flink, to keep Flink SQL on its toes, and to build a real time computing platform. - -Dinky is built on Apache Flink, enhances Flink's application and experience, and explores streaming data warehouses. That is standing on the shoulders of giants innovation and practice, Dinky in the future batch flow of the development trend under unlimited potential. - -Finally, Dinky owes its development to the guidance and work of other excellent open source projects such as Apache Flink. - -## The origin of Dinky -Dinky (something Dlink) : - -1. Dinky" small and delicate", the most intuitive of its characteristics: lightweight but with complex big data development capabilities. - -2. "Data integration is not difficult", meaning "easy to build a platform and application of batch flow". - -3. The transition from Dlink to Dinky was smooth and made clear the objectives of the open source project, always guiding the participants to "always remember what you started with". \ No newline at end of file diff --git a/docs/en-US/share/aggtable.md b/docs/en-US/share/aggtable.md deleted file mode 100644 index a6c3f40f70..0000000000 --- a/docs/en-US/share/aggtable.md +++ /dev/null @@ -1,364 +0,0 @@ -## 摘要 - -本文讲述了 Dlink 对 Flink 的表值聚合功能的应用与增强。增强主要在于定义了 AGGTABLE 来通过 FlinkSql 进行表值聚合的实现,以下将通过两个示例 top2 与 to_map 进行讲解。 - -## 准备工作 - -### 准备测试表 - -#### 学生表(student) - -```sql -DROP TABLE IF EXISTS `student`; -CREATE TABLE `student` ( - `sid` int(11) NOT NULL, - `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`sid`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; - -INSERT INTO `student` VALUES (1, '小明'); -INSERT INTO `student` VALUES (2, '小红'); -INSERT INTO `student` VALUES (3, '小黑'); -INSERT INTO `student` VALUES (4, '小白'); -``` - -#### 一维成绩表(score) - -```sql -DROP TABLE IF EXISTS `score`; -CREATE TABLE `score` ( - `cid` int(11) NOT NULL, - `sid` int(11) NULL DEFAULT NULL, - `cls` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `score` int(11) NULL DEFAULT NULL, - PRIMARY KEY (`cid`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; - -INSERT INTO `score` VALUES (1, 1, 'chinese', 90); -INSERT INTO `score` VALUES (2, 1, 'math', 100); -INSERT INTO `score` VALUES (3, 1, 'english', 95); -INSERT INTO `score` VALUES (4, 2, 'chinese', 98); -INSERT INTO `score` VALUES (5, 2, 'english', 99); -INSERT INTO `score` VALUES (6, 3, 'chinese', 99); -INSERT INTO `score` VALUES (7, 3, 'english', 100); -``` - -#### 前二排名表(scoretop2) - -```sql -DROP TABLE IF EXISTS `scoretop2`; -CREATE TABLE `scoretop2` ( - `cls` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `score` int(11) NULL DEFAULT NULL, - `rank` int(11) NOT NULL, - PRIMARY KEY (`cls`, `rank`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -``` - -#### 二维成绩单表(studentscore) - -```sql -DROP TABLE IF EXISTS `studentscore`; -CREATE TABLE `studentscore` ( - `sid` int(11) NOT NULL, - `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `chinese` int(11) NULL DEFAULT NULL, - `math` int(11) NULL DEFAULT NULL, - `english` int(11) NULL DEFAULT NULL, - PRIMARY KEY (`sid`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -``` - -### 问题提出 - -#### 输出各科成绩前二的分数 - -要求输出已有学科排名前二的分数到scoretop2表中。 - -#### 输出二维成绩单 - -要求将一维成绩表转化为二维成绩单,其中不存在的成绩得分为0,并输出至studentscore表中。 - -## Dlink 的 AGGTABLE - -​ 本文以 Flink 官方的 Table Aggregate Functions 示例 Top2 为例进行比较说明,传送门 https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/functions/udfs/#table-aggregate-functions - -### 官方 Table API 实现 - -```java -import org.apache.flink.api.java.tuple.Tuple2; -import org.apache.flink.table.api.*; -import org.apache.flink.table.functions.TableAggregateFunction; -import org.apache.flink.util.Collector; -import static org.apache.flink.table.api.Expressions.*; - -// mutable accumulator of structured type for the aggregate function -public static class Top2Accumulator { - public Integer first; - public Integer second; -} - -// function that takes (value INT), stores intermediate results in a structured -// type of Top2Accumulator, and returns the result as a structured type of Tuple2 -// for value and rank -public static class Top2 extends TableAggregateFunction, Top2Accumulator> { - - @Override - public Top2Accumulator createAccumulator() { - Top2Accumulator acc = new Top2Accumulator(); - acc.first = Integer.MIN_VALUE; - acc.second = Integer.MIN_VALUE; - return acc; - } - - public void accumulate(Top2Accumulator acc, Integer value) { - if (value > acc.first) { - acc.second = acc.first; - acc.first = value; - } else if (value > acc.second) { - acc.second = value; - } - } - - public void merge(Top2Accumulator acc, Iterable it) { - for (Top2Accumulator otherAcc : it) { - accumulate(acc, otherAcc.first); - accumulate(acc, otherAcc.second); - } - } - - public void emitValue(Top2Accumulator acc, Collector> out) { - // emit the value and rank - if (acc.first != Integer.MIN_VALUE) { - out.collect(Tuple2.of(acc.first, 1)); - } - if (acc.second != Integer.MIN_VALUE) { - out.collect(Tuple2.of(acc.second, 2)); - } - } -} - -TableEnvironment env = TableEnvironment.create(...); - -// call function "inline" without registration in Table API -env - .from("MyTable") - .groupBy($("myField")) - .flatAggregate(call(Top2.class, $("value"))) - .select($("myField"), $("f0"), $("f1")); - -// call function "inline" without registration in Table API -// but use an alias for a better naming of Tuple2's fields -env - .from("MyTable") - .groupBy($("myField")) - .flatAggregate(call(Top2.class, $("value")).as("value", "rank")) - .select($("myField"), $("value"), $("rank")); - -// register function -env.createTemporarySystemFunction("Top2", Top2.class); - -// call registered function in Table API -env - .from("MyTable") - .groupBy($("myField")) - .flatAggregate(call("Top2", $("value")).as("value", "rank")) - .select($("myField"), $("value"), $("rank")); -``` - -### Dlink FlinkSql 实现 - -#### 示例 - -```sql -CREATE AGGTABLE aggdemo AS -SELECT myField,value,rank -FROM MyTable -GROUP BY myField -AGG BY TOP2(value) as (value,rank); -``` - -#### 优势 - -​ 可以通过 FlinkSql 来实现表值聚合的需求,降低了开发与维护成本。 - -#### 缺点 - -​ 语法固定,示例关键字必须存在并进行描述,where 可以加在 FROM 和 GROUP BY 之间。 - -## Dlink 本地实现各科成绩前二 - -​ 本示例通过 Dlink 的本地环境进行演示实现。 - -### 进入Dlink - -![image-20210615115042539](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGIAFicLZ3bwSawOianJQnNWuKAvZJ3Bb00DiaBxtxvnXgToGibPAwMFhs6A/0?wx_fmt=png) - -​ 只有版本号大于等于 0.2.2-rc1 的 Dlink 才支持本文 AGGTABLE 的使用。 - -### 编写 FlinkSQL - -```sql -jdbcconfig:='connector' = 'jdbc', - 'url' = 'jdbc:mysql://127.0.0.1:3306/data?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true', - 'username'='dlink', - 'password'='dlink',; -CREATE TABLE student ( - sid INT, - name STRING, - PRIMARY KEY (sid) NOT ENFORCED -) WITH ( - ${jdbcconfig} - 'table-name' = 'student' -); -CREATE TABLE score ( - cid INT, - sid INT, - cls STRING, - score INT, - PRIMARY KEY (cid) NOT ENFORCED -) WITH ( - ${jdbcconfig} - 'table-name' = 'score' -); -CREATE TABLE scoretop2 ( - cls STRING, - score INT, - `rank` INT, - PRIMARY KEY (cls,`rank`) NOT ENFORCED -) WITH ( - ${jdbcconfig} - 'table-name' = 'scoretop2' -); -CREATE AGGTABLE aggscore AS -SELECT cls,score,rank -FROM score -GROUP BY cls -AGG BY TOP2(score) as (score,rank); - -insert into scoretop2 -select -b.cls,b.score,b.`rank` -from aggscore b -``` - -​ 本 Sql 使用了 Dlink 的增强特性 Fragment 机制,对 jdbc的配置进行了定义。 - -### 维护 FlinkSQL 及配置 - -![image-20210615115521967](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGeibmfcst4hHVTqzFmX6LvBXqgPTFcCOWHuIxEcbNHgfnUc0mhPm1eFw/0?wx_fmt=png) - -​ 编写 FlinkSQL ,配置开启 Fragment 机制,设置 Flink 集群为本地执行。点击保存。 - -### 同步执行INSERT - -![image-20210615115714713](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGApFiacyxkKERLE9FhsteTeTovcjTQHiaPKcxY6YqSukkVYZWVFGxPJibQ/0?wx_fmt=png) - -​ 点击同步执行按钮运行当前编辑器中的 FlinkSQL 语句集。弹出提示信息,等待执行完成后自动关闭并刷新信息和结果。 - -​ 当前版本使用异步提交功能将直接提交任务到集群,Studio 不负责执行结果的记录。提交任务前请保存 FlinkSQL 和配置,否则将提交旧的语句和配置。 - -### 执行反馈 - -![image-20210615115913647](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGL7Wv8Tefsn0h1USWf2VLXB2Tb3yx4K2QksiaFplehnrvz25cE0nQnlA/0?wx_fmt=png) - -​ 本地执行成功,“0_admin” 为本地会话,里面存储了 Catalog。 - -### 同步执行SELECT查看中间过程 - -![image-20210615120129426](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGXkEXFib5ic21kOemq6ib8kWAdLCBicicjBxU9oibmaSs4Hru8EccxKe5z0dg/0?wx_fmt=png) - -​ 由于当前会话中已经存储了表的定义,此时直接选中 select 语句点击同步执行可以重新计算并展示其计算过程中产生的结果,由于 Flink 表值聚合操作机制,该结果非最终结果。 - -### 同步执行SELECT查看最终结果 - -![image-20210615121542233](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkG5mNQFZp4YIuwIrh6cJteFIwsbomibSk32hWbFqlt887F9lee9NYT8fQ/0?wx_fmt=png) - -​ 在草稿的页面使用相同的会话可以共享 Catalog,此时只需要执行 select 查询 sink 表就可以预览最终的统计结果。 - -### 查看Mysql表的数据 - -![image-20210615120738413](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGerEdvQLXGNqfm7KZT7ARaNBV0mlrUdah69JAB3miaBFBgUU3iaaowcLg/0?wx_fmt=png) - - - -​ sink 表中只有五条数据,结果是正确的。 - -## Dlink 远程实现二维成绩单 - -​ 本示例通过 Dlink 控制远程集群来实现。 - -​ 远程集群的 lib 中需要上传 dlink-function.jar 。 - -### 编写FlinkSQL - -```sql -jdbcconfig:='connector' = 'jdbc', - 'url' = 'jdbc:mysql://127.0.0.1:3306/data?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true', - 'username'='dlink', - 'password'='dlink',; -CREATE TABLE student ( - sid INT, - name STRING, - PRIMARY KEY (sid) NOT ENFORCED -) WITH ( - ${jdbcconfig} - 'table-name' = 'student' -); -CREATE TABLE score ( - cid INT, - sid INT, - cls STRING, - score INT, - PRIMARY KEY (cid) NOT ENFORCED -) WITH ( - ${jdbcconfig} - 'table-name' = 'score' -); -CREATE TABLE studentscore ( - sid INT, - name STRING, - chinese INT, - math INT, - english INT, - PRIMARY KEY (sid) NOT ENFORCED -) WITH ( - ${jdbcconfig} - 'table-name' = 'studentscore' -); -CREATE AGGTABLE aggscore2 AS -SELECT sid,data -FROM score -GROUP BY sid -AGG BY TO_MAP(cls,score) as (data); - -insert into studentscore -select -a.sid,a.name, -cast(GET_KEY(b.data,'chinese','0') as int), -cast(GET_KEY(b.data,'math','0') as int), -cast(GET_KEY(b.data,'english','0') as int) -from student a -left join aggscore2 b on a.sid=b.sid -``` - -​ 本实例通过表值聚合将分组后的多行转单列然后通过 GET_KEY 取值的思路来实现。同时,也使用了 Fragment 机制。 - -### 同步执行 - -![image-20210615131731449](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGxHX5T3C2vr2CF9LicZicBnGZOYmpXVq343zYFPjXsae0icQ1mTVWcsugQ/0?wx_fmt=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 UI 可以发现刚刚提交的批任务,此时可以发现集群版本号为 1.12.2 ,而 Dlink 默认版本为 1.12.4 ,所以一般大版本内可以互相兼容。 - -### 查看Mysql表的数据 - -![image-20210615132004925](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTrkkX1Jsib7GxQY7tpiciaNdkGc9NX5IzQ6Kog5oYPiaaELmCYzh3vpdUaK40hNuFPrlAWY1jlZd7QbtQ/0?wx_fmt=png) - -​ 查看 Mysql 表的最终数据,发现存在四条结果,且也符合问题的要求。 - diff --git a/docs/extend/clickhouse.md b/docs/extend/clickhouse.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/extend/clickhouse.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/extend/completion.md b/docs/extend/completion.md deleted file mode 100644 index bf975f69cb..0000000000 --- a/docs/extend/completion.md +++ /dev/null @@ -1,35 +0,0 @@ -## FlinkSQL 编辑器自动补全函数 - -Dlink-0.3.2 版本上线了一个非常实用的功能——自动补全。 - -我们在使用 IDEA 等工具时,提示方法并补全、生成的功能大大提升了开发效率。而 Dlink 的目标便是让 FlinkSQL 更加丝滑,所以其提供了自定义的自动补全功能。对比传统的使用 `Java` 字符串来编写 FlinkSQL 的方式,Dlink 的优势是巨大。 - -在文档中心,我们可以根据自己的需要扩展相应的自动补全规则,如 `UDF`、`Connector With` 等 FlinkSQL 片段,甚至可以扩展任意可以想象到内容,如注释、模板、配置、算法等。 - -具体新增规则的示例请看下文描述。 - -## set 语法来设置执行环境参数 - -对于一个 FlinkSQL 的任务来说,除了 sql 口径,其任务配置也十分重要。所以 Dlink-0.3.2 版本中提供了 `sql-client` 的 `set` 语法,可以通过 `set` 关键字来指定任务的执行配置(如 “ `set table.exec.resource.default-parallelism=2;` ” ),其优先级要高于 Dlink 自身的任务配置(面板右侧)。 - -那么长的参数一般人谁记得住?等等,别忘了 Dlink 的新功能自动补全~ - -配置实现输入 `parallelism` 子字符串来自动补全 `table.exec.resource.default-parallelism=` 。 - -在文档中心中添加一个规则,名称为 `parallelism`,填充值为 `table.exec.resource.default-parallelism=`,其他内容随意。 - -保存之后,来到编辑器输入 `par` . - -选中要补全的规则后,编辑器中自动补全了 `table.exec.resource.default-parallelism=` 。 - -至此,有些小伙伴发现,是不是可以直接定义 `pl2` 来自动生成 `set table.exec.resource.default-parallelism=2;` ? - -当然可以的。 - -还有小伙伴问,可不可以定义 `pl` 生成 `set table.exec.resource.default-parallelism=;` 后,光标自动定位到 `=` 于 `;` 之间? - -这个也可以的,只需要定义 `pl` 填充值为 `set table.exec.resource.default-parallelism=${1:};` ,即可实现。 - -所以说,只要能想象到的都可以定义,这样的 Dlink 你爱了吗? - -嘘,还有点小 bug 后续修复呢。如果有什么建议及问题请及时指出哦。 \ No newline at end of file diff --git a/docs/extend/connector.md b/docs/extend/connector.md deleted file mode 100644 index d82d778f52..0000000000 --- a/docs/extend/connector.md +++ /dev/null @@ -1,3 +0,0 @@ -## 扩展 Connector - -将 Flink 集群上已扩展好的 Connector 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 Connector 过程同 Flink 官方一样。 diff --git a/docs/extend/datasource.md b/docs/extend/datasource.md deleted file mode 100644 index 148f802fa6..0000000000 --- a/docs/extend/datasource.md +++ /dev/null @@ -1,3 +0,0 @@ -## 扩展 Metadata - -遵循SPI。 \ No newline at end of file diff --git a/docs/extend/dataspherestudio.md b/docs/extend/dataspherestudio.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/extend/dataspherestudio.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/extend/dolphinscheduler.md b/docs/extend/dolphinscheduler.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/extend/dolphinscheduler.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/extend/doris.md b/docs/extend/doris.md deleted file mode 100644 index 4df8210853..0000000000 --- a/docs/extend/doris.md +++ /dev/null @@ -1,200 +0,0 @@ -## 背景 - -Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。 - -目前 Doris 的生态正在建设中,本文将分享如何基于 Dlink 实现 Mysql 变动数据通过 Flink 实时入库 Doris。 - -## 准备 - -老规矩,列清各组件版本: - -| 组件 | 版本 | -| :-------------: | :----------: | -| Flink | 1.13.3 | -| Flink-mysql-cdc | 2.1.0 | -| Doris | 0.15.1-rc09 | -| doris-flink | 1.0-SNAPSHOT | -| Mysql | 8.0.13 | -| Dlink | 0.4.0 | - -需要注意的是,本文的 Doris 是基于 OracleJDK1.8 和 Scala 2.11 通过源码进行编译打包的,所以所有组件的 scala 均为 2.11,此处和 Doris 社区略有不同。 - -## 部署 - -本文的 Flink 和 Doris 的部署不做描述,详情请查阅官网。 - -[Doris]: https://doris.apache.org/master/zh-CN/extending-doris/flink-doris-connector.html#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95 "Doris" - -本文在 Dlink 部署成功的基础上进行,如需查看具体部署步骤,请阅读《flink sql 知其所以然(十六):flink sql 开发企业级利器之 Dlink》。 - -Dlink 的 plugins 下添加 `doris-flink-1.0-SNAPSHOT.jar` 和 `flink-sql-connector-mysql-cdc-2.1.0.jar` 。重启 Dlink。 - -```java -plugins/ -- Flink 相关扩展 -|- doris-flink-1.0-SNAPSHOT.jar -|- flink-csv-1.13.3.jar -|- flink-dist_2.11-1.13.3.jar -|- flink-format-changelog-json-2.1.0.jar -|- flink-json-1.13.3.jar -|- flink-shaded-zookeeper-3.4.14.jar -|- flink-sql-connector-mysql-cdc-2.1.0.jar -|- flink-table_2.11-1.13.3.jar -|- flink-table-blink_2.11-1.13.3.jar -``` - -当然,如果您想直接使用 FLINK_HOME 的话,可以在 `auto.sh` 文件中 `SETTING` 变量添加`$FLINK_HOME/lib` 。 - -## 数据表 - -### 学生表 (student) - -```sql --- Mysql -DROP TABLE IF EXISTS `student`; -CREATE TABLE `student` ( - `sid` int(11) NOT NULL, - `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`sid`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; - -INSERT INTO `student` VALUES (1, '小红'); -INSERT INTO `student` VALUES (2, '小黑'); -INSERT INTO `student` VALUES (3, '小黄'); -``` - -### 成绩表(score) - -```sql --- Mysql -DROP TABLE IF EXISTS `score`; -CREATE TABLE `score` ( - `cid` int(11) NOT NULL, - `sid` int(11) NULL DEFAULT NULL, - `cls` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `score` int(11) NULL DEFAULT NULL, - PRIMARY KEY (`cid`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; - -INSERT INTO `score` VALUES (1, 1, 'chinese', 90); -INSERT INTO `score` VALUES (2, 1, 'math', 95); -INSERT INTO `score` VALUES (3, 1, 'english', 93); -INSERT INTO `score` VALUES (4, 2, 'chinese', 92); -INSERT INTO `score` VALUES (5, 2, 'math', 75); -INSERT INTO `score` VALUES (6, 2, 'english', 80); -INSERT INTO `score` VALUES (7, 3, 'chinese', 100); -INSERT INTO `score` VALUES (8, 3, 'math', 60); -``` - -### 学生成绩宽表(scoreinfo) - -```sql --- Doris -CREATE TABLE scoreinfo -( - cid INT, - sid INT, - name VARCHAR(32), - cls VARCHAR(32), - score INT -) -UNIQUE KEY(cid) -DISTRIBUTED BY HASH(cid) BUCKETS 10 -PROPERTIES("replication_num" = "1"); -``` - - - -## FlinkSQL - -```sql -CREATE TABLE student ( - sid INT, - name STRING, - PRIMARY KEY (sid) NOT ENFORCED -) WITH ( -'connector' = 'mysql-cdc', -'hostname' = '127.0.0.1', -'port' = '3306', -'username' = 'test', -'password' = '123456', -'database-name' = 'test', -'table-name' = 'student'); -CREATE TABLE score ( - cid INT, - sid INT, - cls STRING, - score INT, - PRIMARY KEY (cid) NOT ENFORCED -) WITH ( -'connector' = 'mysql-cdc', -'hostname' = '127.0.0.1', -'port' = '3306', -'username' = 'test', -'password' = '123456', -'database-name' = 'test', -'table-name' = 'score'); -CREATE TABLE scoreinfo ( - cid INT, - sid INT, - name STRING, - cls STRING, - score INT, - PRIMARY KEY (cid) NOT ENFORCED -) WITH ( -'connector' = 'doris', -'fenodes' = '127.0.0.1:8030' , -'table.identifier' = 'test.scoreinfo', -'username' = 'root', -'password'='' -); -insert into scoreinfo -select -a.cid,a.sid,b.name,a.cls,a.score -from score a -left join student b on a.sid = b.sid -``` - -## 调试 - -### 在 Dlink 中提交 - -本示例采用了 yarn-session 的方式进行提交。 - -![image-20211218134246511](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibG3QjNqVbMk7L41wHykKnkV0YxDCVSYj68HlFWylpYckkXicgnTDU7uQ/0?wx_fmt=png) - -### FlinkWebUI - -![image-20211218134439699](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibn1jXbvKznaF8Tm4AxxvYYDI0fEtXbGm0XUeXhGp44KMlPdoOzjvtHQ/0?wx_fmt=png) - -上图可见,流任务已经成功被 Dlink 提交的远程集群了。 - -### Doris 查询 - -![image-20211218135404787](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9iblKTY6o9fWZxFDQYC19wKVFRGDuUBgNOZxm14sWjyr8tUY7RDeUiaEUw/0?wx_fmt=png) - -上图可见,Doris 已经被写入了历史全量数据。 - -### 增量测试 - -在 Mysql 中执行新增语句: - -```sql -INSERT INTO `score` VALUES (9, 3, 'english', 100); -``` - -Doris 成功被追加: - -![image-20211218135545742](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibvE4qyQ9ttf2kNZ3raEgabvh442HfiaIfm2l5dhdFmWoGiaHMlvcQmocw/0?wx_fmt=png) - -### 变动测试 - -在 Mysql 中执行新增语句: - -```sql -update score set score = 100 where cid = 1 -``` - -Doris 成功被修改: - -![image-20211218135949764](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ib3liaIvXQcCSboO4IoeJhtTRa38ukNogtFzwg31mNEFwRcJ1wGNIhQkQ/0?wx_fmt=png) - diff --git a/docs/extend/flinkversion.md b/docs/extend/flinkversion.md deleted file mode 100644 index d415be0861..0000000000 --- a/docs/extend/flinkversion.md +++ /dev/null @@ -1,5 +0,0 @@ -## 扩展其他版本的 Flink - -Flink 的版本取决于 lib 下的 dlink-client-1.13.jar。当前版本默认为 Flink 1.13.3 API。向其他版本的集群提交任务可能存在问题,已实现 1.11、1.12、1.13, 1.14,切换版本时只需要将对应依赖在lib下进行替换,然后重启即可。 - -切换版本时需要同时更新 plugins 下的 Flink 依赖。 \ No newline at end of file diff --git a/docs/extend/iceberg.md b/docs/extend/iceberg.md deleted file mode 100644 index 19b5ed26a6..0000000000 --- a/docs/extend/iceberg.md +++ /dev/null @@ -1 +0,0 @@ -## 敬请期待 \ No newline at end of file diff --git a/docs/guide/debug.md b/docs/guide/debug.md deleted file mode 100644 index a9a8b1b092..0000000000 --- a/docs/guide/debug.md +++ /dev/null @@ -1,288 +0,0 @@ -## 前言 - -最近小伙伴们一直追问,如何在 IDEA 里去调试 Dlink。本文将指导大家可以成功地搭建调试环境并可以修改相关功能的代码,当然欢迎大家将相关问题修复及新功能的实现贡献到 dev 分支哦。那一起来看看吧! - -## 准备 - -首先,请从 GitHub 中拉取 Dlink 源码,例如: - -```bash -git clone https://github.com/DataLinkDC/dlink.git -``` - -## IntelliJ IDEA - -该指南介绍了关于如何设置 IntelliJ IDEA 来进行 Dlink 前后端开发。Eclipse 不建议使用。 - -以下文档描述了 IntelliJ IDEA 2021.3 (https://www.jetbrains.com/idea/download/) 的设置步骤以及 Dlink 的导入步骤。 - -所以以下简称 IDEA 来表示 IntelliJ IDEA 。 - -### 安装 Lombok 插件 - -IDEA 提供了插件设置来安装 Lombok 插件。如果尚未安装,请在导入 Dlink 之前按照以下说明来进行操作以启用对 Lombok 注解的支持: - -1. 转到 IDEA Settings → Plugins 并选择 Marketplace 。 -2. 选择并安装 Lombok 插件。 -3. 如果出现提示,请重启 IDEA 。 - -### 导入 Dlink - -1. 启动 IDEA 并选择 Open。 -2. 选择已克隆的 Dlink 存储库的根文件夹。 -3. 等待项目加载完成。 -4. 设置 JDK 1.8 和 Maven 3.6.0。 - -## 前端环境 - -### 安装 npm - -可用版本 7.19.0,安装步骤详情百度。 - -### 安装 node.js - -可用版本 14.17.0,安装步骤详情百度。 - -### 初始化依赖 - -```bash -npm install --force -``` - -## 编译项目 - -### 编译 - -IDEA 里 Build → Build Project 。 - -### 打包 - -```bash -mvn clean install -Dmaven.test.skip=true -``` - -打包最终位于根目录 build 下,`dlink-release-0.5.0-SNAPSHOT.tar.gz` 其大小约为 40 M。 - -### 问题 - -如果在打包 dlink-web 过程失败,请先单独打包前端进行问题排查。 - -```bash -npm build -``` - -## 修改 pom - -### dlink-core.pom - -```xml - - com.dlink - dlink-client-1.13 - provided - - - com.dlink - dlink-executor - provided - - - com.dlink - dlink-connector-jdbc-1.13 - provided - - - com.dlink - dlink-function - provided - - - com.dlink - dlink-gateway - provided - -``` - -把上述依赖的 scope 注释掉。 - -### dlink-admin.pom - -可在该 pom 下按功能添加其他 Dlink 子组件依赖以及 Flink 和 Hadoop 的第三方依赖。 - -如使用 ClickHouse 数据源及元数据功能,则添加以下内容: - -```xml - - com.dlink - dlink-metadata-clickhouse - 0.5.0-SNAPSHOT - -``` - -如使用 Flink Hive 等其他连接器功能,则需要添加相关依赖。 - -## 修改配置文件 - -### application.yml - -配置数据库连接信息: - -```yaml -spring: - datasource: - url: jdbc:mysql://127.0.0.1:3306/dlink?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - username: dlink - password: dlink - driver-class-name: com.mysql.cj.jdbc.Driver -``` - -## 初始化数据库 - -创建 dlink 用户并在 dlink 数据库中执行 dlink-doc/sql/dlink.sql 文件。 - -此外 dlink-doc/sql/dlink_history.sql 标识了各版本的升级 sql。 - -## 启动后端服务 - -启动 dlink-admin 下的 Dlink 启动类,可见 8888 端口。 - -## 启动前端服务 - -```bash -npm start -``` - -等待几分钟,访问 127.0.0.1:8000 可见登录页。 - -输入 admin/admin 登录。 - -## 源码结构 - -```java -dlink -- 父项目 -|-dlink-admin -- 管理中心 -|-dlink-app -- Application Jar -|-dlink-assembly -- 打包配置 -|-dlink-client -- Client 中心 -| |-dlink-client-1.11 -- Client-1.11 实现 -| |-dlink-client-1.12 -- Client-1.12 实现 -| |-dlink-client-1.13 -- Client-1.13 实现 -| |-dlink-client-1.14 -- Client-1.14 实现 -|-dlink-common -- 通用中心 -|-dlink-connectors -- Connectors 中心 -| |-dlink-connector-jdbc -- Jdbc 扩展 -|-dlink-core -- 执行中心 -|-dlink-doc -- 文档 -| |-bin -- 启动脚本 -| |-bug -- bug 反馈 -| |-config -- 配置文件 -| |-doc -- 使用文档 -| |-sql -- sql脚本 -|-dlink-executor -- 执行中心 -|-dlink-extends -- 扩展中心 -|-dlink-function -- 函数中心 -|-dlink-gateway -- Flink 网关中心 -|-dlink-metadata -- 元数据中心 -| |-dlink-metadata-base -- 元数据基础组件 -| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现 -| |-dlink-metadata-mysql -- 元数据- mysql 实现 -| |-dlink-metadata-oracle -- 元数据- oracle 实现 -| |-dlink-metadata-postgresql -- 元数据- postgresql 实现 -|-dlink-web -- React 前端 -|-docs -- 官网文档 -``` - -### dlink-admin - -Dlink 的管理中心,标准的 SpringBoot 应用,负责与前端 react 交互。 - -### dlink-app - -Dlink 在 Yarn Application 模式所使用的简化解析包。 - -### dlink-assembly - -项目打包配置,管理了最终 tar.gz 的打包内容。 - -### dlink-client - -Dlink 定制的 Flink 运行环境的实现。用来桥接 Dlink 与不同版本的 Flink 运行环境。 - -### dlink-common - -Dlink 的子项目的公用类及实现项目。 - -### dlink-connectors - -Dlink 的 Connectors,目前实现了 Oracle、Clickhouse、SQLServer。此外 Dlink 可以直接使用 Flink 的所有连接器,在确保依赖不冲突的情况下。 - -### dlink-core - -Dlink 的核心模块,内包含 Flink RestAPI 、集群、SQL解释器、Job统一调度器(JobManager)、会话管理等实现。 - -### dlink-doc - -此模块为打包所需的资源模块,包含启动脚本、sql脚本、配置文件等。 - -### dlink-executor - -Dlink 的执行模块,是从 dlink-core 中拆分出来,内含最核心的 Executor、Interceptor、Operation 等实现。 - -### dlink-extends - -存放 Dlink 扩展其他生态的组件。 - -### dlink-function - -Dlink 所额外提供的 Flink 各种自定义函数。 - -### dlink-gateway - -Dlink 的任务网关,负责把实现不同执行模式的任务提交与管理,目前主要包含 Yarn PerJob 和 Application。 - -### dlink-metadata - -Dlink 的元数据中心,用于实现各种外部数据源对接到 Dlink,以此使用其各种查询、执行等能力。未来用于 Flink Catalog 的预装载等。 - -### dlink-web - -Dlink 的前端项目,基于 Ant Design Pro 5.0.0。Why Not Vue ? React Who Use Who Know。(中式英语 =。=) - -Dlink 的前端架构与开发后续文章会详解,本文略。 - -### docs - -Dlink 的官网实现,大佬们可以修改或贡献 markdown。多多分享,让社区发展更快,十分感谢。 - -## 任务执行路线 - -同步执行:三角号按钮。 - -异步提交:小火箭按钮。 - -### Local - -同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> LocalStreamExecutor ==> CustomTableEnvironmentImpl ==> LocalEnvironment - -### Standalone - -注册集群实例 ==> 同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> RemoteStreamExecutor ==> CustomTableEnvironmentImpl ==> RemoteEnvironment ==> JobGraph ==> Flink Standalone Cluster - -### Yarn Session - -注册集群实例 ==> 同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> RemoteStreamExecutor ==> CustomTableEnvironmentImpl ==> RemoteEnvironment ==> JobGraph ==> Flink Yarn Session Cluster - -### Yarn Per-Job - -注册集群配置 ==> 异步提交 ==> StudioService ==> JobManager ==> Executor ==> JobGraph ==> Gateway ==> YarnPerJobGateway==> YarnClient ==> Flink Yarn Per-Job Cluster - -### Yarn Application - -注册集群配置 ==> 异步提交 ==> StudioService ==> JobManager ==> Executor ==> TaskId & JDBC ==> Gateway ==> YarnApplicationGateway==> YarnClient ==> dlink-app.jar ==> Executor ==> AppStreamExecutor ==> CustomTableEnvironmentImpl ==> LocalEnvironmentFlink Yarn Application Cluster - -## 总结 - -以为内容为大家带来了 Dlink 的基本功能 IDEA 部署调试步骤,并简单介绍了各模块的作用,也清晰的描述了各执行模式下 FlinkSQL 实现免 Jar 提交的代码思路。在了解以上内容后,相信大家已经可以动手改造 Dlink 了,欢迎大家及时加入 Dlink 社区成为核心贡献者,共建共赢。 - -后续文章将指引大家如何快速拓展 Dlink 的功能组件,敬请期待。 - diff --git a/docs/guide/deploy.md b/docs/guide/deploy.md deleted file mode 100644 index f4bc5bc912..0000000000 --- a/docs/guide/deploy.md +++ /dev/null @@ -1,153 +0,0 @@ -### 从安装包开始 - -Dlink 可以部署在 Flink 及 Hadoop 集群之外的任意节点,只要网络通就可;部署在集群内部也可。 - -``` -config/ -- 配置文件 -|- application.yml -extends/ -- 扩展 -|- dlink-client-1.11.jar -|- dlink-client-1.12.jar -|- dlink-client-1.14.jar -html/ -- 前端编译产物,用于Nginx -jar/ -- dlink application模式提交sql用到的jar -lib/ -- 内部组件 -|- dlink-client-1.13.jar -- 必需 -|- dlink-connector-jdbc.jar -|- dlink-function.jar -|- dlink-metadata-clickhouse.jar -|- dlink-metadata-mysql.jar -|- dlink-metadata-oracle.jar -|- dlink-metadata-postgresql.jar -plugins/ -|- flink-connector-jdbc_2.11-1.13.3.jar -|- flink-csv-1.13.3.jar -|- flink-dist_2.11-1.13.3.jar -|- flink-json-1.13.3.jar -|- flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar -|- flink-shaded-zookeeper-3.4.14.jar -|- flink-table-blink_2.11-1.13.3.jar -|- flink-table_2.11-1.13.3.jar -|- mysql-connector-java-8.0.21.jar -sql/ -|- dlink.sql --Mysql初始化脚本 -auto.sh --启动停止脚本 -dlink-admin.jar --程序包 -``` - -解压后结构如上所示,修改配置文件内容。lib 文件夹下存放 dlink 自身的扩展文件,plugins 文件夹下存放 flink 及 hadoop 的官方扩展文件。其中 plugins 中的所有 jar 需要根据版本号自行下载并添加,才能体验完整功能,当然也可以放自己修改的 Flink 源码编译包。当然,如果您硬要使用 FLINK_HOME 的话,可以在 `auto.sh` 文件中 `SETTING` 变量添加`$FLINK_HOME/lib` 。extends 文件夹只作为扩展插件的备份管理,不会被 dlink 加载。 - -在Mysql数据库中创建数据库并执行初始化脚本。 - -执行以下命令管理应用。 - -```shell -sh auto.sh start -sh auto.sh stop -sh auto.sh restart -sh auto.sh status -``` - -前端 Nginx 部署: -将 html 文件夹上传至 nginx 的 html 文件夹下,修改 nginx 配置文件并重启。如果 Nginx 和 Dlink 在同一节点,则可以指定静态资源的绝对路径到 Dlink 的 html 目录。 - -```shell - server { - listen 9999; - server_name localhost; - - # gzip config - gzip on; - gzip_min_length 1k; - gzip_comp_level 9; - gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; - gzip_vary on; - gzip_disable "MSIE [1-6]\."; - - #charset koi8-r; - - #access_log logs/host.access.log main; - - location / { - root html; - index index.html index.htm; - try_files $uri $uri/ /index.html; - } - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root html; - } - - location ^~ /api { - proxy_pass http://127.0.0.1:8888; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Real-IP $remote_addr; - } - } -``` - -1. server.listen 填写前端访问端口,例如 9999 -2. proxy_pass 填写后端地址如 http://127.0.0.1:8888 -3. 将 html 文件夹下打包好的前端资源上传到 nginx 的 html 文件夹中 -4. 重载配置文件:nginx -s reload -5. 直接访问前端端口,例如 9999 - -### 从源码编译 - -#### 项目目录 - -```java -dlink -- 父项目 -|-dlink-admin -- 管理中心 -|-dlink-app -- Application Jar -|-dlink-assembly -- 打包配置 -|-dlink-client -- Client 中心 -| |-dlink-client-1.11 -- Client-1.11 实现 -| |-dlink-client-1.12 -- Client-1.12 实现 -| |-dlink-client-1.13 -- Client-1.13 实现 -| |-dlink-client-1.14 -- Client-1.14 实现 -|-dlink-common -- 通用中心 -|-dlink-connectors -- Connectors 中心 -| |-dlink-connector-jdbc -- Jdbc 扩展 -|-dlink-core -- 执行中心 -|-dlink-doc -- 文档 -| |-bin -- 启动脚本 -| |-bug -- bug 反馈 -| |-config -- 配置文件 -| |-doc -- 使用文档 -| |-sql -- sql脚本 -|-dlink-executor -- 执行中心 -|-dlink-extends -- 扩展中心 -|-dlink-function -- 函数中心 -|-dlink-gateway -- Flink 网关中心 -|-dlink-metadata -- 元数据中心 -| |-dlink-metadata-base -- 元数据基础组件 -| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现 -| |-dlink-metadata-mysql -- 元数据- mysql 实现 -| |-dlink-metadata-oracle -- 元数据- oracle 实现 -| |-dlink-metadata-postgresql -- 元数据- postgresql 实现 -|-dlink-web -- React 前端 -|-docs -- 官网 md -``` - -#### 编译打包 - -以下环境版本实测编译成功: - -| 环境 | 版本 | -| :-----: | :-------: | -| npm | 7.19.0 | -| node.js | 14.17.0 | -| jdk | 1.8.0_201 | -| maven | 3.6.0 | -| lombok | 1.18.16 | -| mysql | 5.7+ | - -```shell -mvn clean install -Dmaven.test.skip=true -``` diff --git a/docs/guide/functions.md b/docs/guide/functions.md deleted file mode 100644 index 46ea84c9d4..0000000000 --- a/docs/guide/functions.md +++ /dev/null @@ -1,121 +0,0 @@ -#### 登录 - -超级管理员:admin/admin; - -新增用户:默认密码 123456。 - -#### 集群中心 - -注册 Flink 集群地址时,格式为 host:port ,用英文逗号分隔。即添加 Flink 集群的 JobManager 的 RestApi 地址。当 HA 模式时,地址间用英文逗号分隔,例如:192.168.123.101:8081,192.168.123.102:8081,192.168.123.103:8081。新增和修改的等待时间较长,是因为需要检测最新的 JobManager 地址。心跳检测为手动触发,会更新集群状态与 JobManager 地址。 - -#### Studio - -1. 在左侧目录区域创建文件夹或任务。 -2. 在中间编辑区编写 FlinkSQL 。 -3. 在右侧配置作业配置和执行参数。 -4. Fragment 开启后,可以使用增强的 sql 片段语法: - -```sql -sf:=select * from;tb:=student; -${sf} ${tb} -##效果等同于 -select * from student -``` - -5. 内置 sql 增强语法-表值聚合: - -```sql -CREATE AGGTABLE aggdemo AS -SELECT myField,value,rank -FROM MyTable -GROUP BY myField -AGG BY TOP2(value) as (value,rank); -``` - -6. MaxRowNum 为批流(Session模式下)执行Select时预览查询结果的最大集合长度,默认 100,最大 9999。 -7. SavePoint策略支持最近一次、最早一次、指定一次三种策略。 -8. Flink 共享会话共享 Catalog ,会话的使用需要在左侧会话选项卡手动创建并维护。 -9. 连接器为 Catalog 里的表信息,清空按钮会销毁当前会话。 -10. Local 模式主要用于语法校验、血缘分析、执行图预览等功能,当然也可执行任务,但目前版本建议请使用远程集群来执行任务。 -11. 执行 SQL 时,如果您选中了部分 SQL,则会执行选中的内容,否则执行全部内容。 -12. 小火箭的提交功能是异步提交当前任务已保存的 FlinkSQL 及配置到集群。由于适用于快速提交稳定的任务,所以无法提交草稿,且无法预览数据。 -13. 执行信息或者历史中那个很长很长的就是集群上的 JobId 或者 APPID,任务历史可以查看执行过的任务的数据回放。 -14. 草稿是无法被异步远程提交的,只能同步执行,且无法保存。 -15. Studio 的布局可以随意拖动,但由于是实时计算,联动较多,请温柔些。 -16. 同步执行时可以自由指定任务名,异步提交默认为作业名。 -17. 支持 set 语法设置 Flink 的执行配置,其优先级大于右侧的配置。 -18. 支持远程集群查看、SavePoint 及停止任务。 -19. 支持自定义及上下文的 sql 函数或片段的自动补全,通过函数文档维护。 -20. 支持 Flink 所有官方的连接器及插件的扩展,但需注意版本号适配。 -21. 使用 IDEA 进行源码调试时,需要在 admin 及 core 下修改相应 pom 依赖的引入来完成功能的加载。 -22. 支持基于 StreamGraph 的可执行 FlinkSql (Insert into)的血缘分析,无论你的 sql 有多复杂或者多 view。 -23. Dlink 目前提交方式支持 Standalone 、Yarn Session、Yarn PerJob、Yarn Application,K8S 后续支持。 -24. Dlink 目前对于 Flink 多版本的支持只能一个 Dlink 实例支持一个 Flink 版本,未来将开源同时支持多版本的能力。 -25. 使用 Yarn PerJob、Yarn Application 需要配置集群配置,且其自动注册的集群实例需要手动点击回收。 -26. 其他内容后续更新。。。 - -## 运行截图 - -> 登录页 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/login.png) - -> 首页 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/welcome.png) - -> Studio SQL 开发提示与补全 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/sqldev.png) - -> Studio 语法和逻辑检查 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/sqlcheck.png) - -> Studio 批流SELECT预览 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/selectpreview.png) - -> Studio 异常反馈 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/sqlerror.png) - -> Studio 进程监控 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/process.png) - -> Studio 执行历史 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/history.png) - -> Studio 数据回放 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/datashow.png) - -> Studio SavePoint 管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/savepoint.png) - -> Studio 血缘分析 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/ca.png) - -> Studio 函数浏览 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/function.png) - -> Studio 共享会话 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/session.png) - -> 集群管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/cluster.png) - -> 集群配置管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/clusterconfiguration.png) - -> 数据源管理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/040/db.png) diff --git a/docs/guide/quickstart.md b/docs/guide/quickstart.md deleted file mode 100644 index 183f65c711..0000000000 --- a/docs/guide/quickstart.md +++ /dev/null @@ -1,176 +0,0 @@ -## 简介 - -实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑,并致力于实时计算平台建设。 - -Dinky 架构于 Apache Flink,增强 Flink 的应用与体验,探索流式数仓。即站在巨人肩膀上创新与实践,Dinky 在未来批流一体的发展趋势下潜力无限。 - -最后,Dinky 的发展皆归功于 Apache Flink 等其他优秀的开源项目的指导与成果。 - -## 由来 - -Dinky(原 Dlink): - -1.Dinky 英译为 “ 小巧而精致的 ” ,最直观的表明了它的特征:轻量级但又具备复杂的大数据开发能力。 - -2.为 “ Data Integrate No Knotty ” 的首字母组合,英译 “ 数据整合不难 ”,寓意 “ 易于建设批流一体平台及应用 ”。 - -3.从 Dlink 改名为 Dinky 过渡平滑,更加形象的阐明了开源项目的目标,始终指引参与者们 “不忘初心,方得始终 ”。 - -## 原理 - -![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/main/dinky_principle.png) - -### JobManager - -JobManager 作为 Dinky 的作业管理的统一入口,负责 Flink 的各种作业执行方式及其他功能的调度。 - -### Executor - -Executor 是 Dinky 定制的 FlinkSQL 执行器,来模拟真实的 Flink 执行环境,负责 FlinkSQL 的 Catalog 管理、UDF管理、片段管理、配置管理、语句集管理、语法校验、逻辑验证、计划优化、生成 JobGraph、本地执行、远程提交、SELECT 及 SHOW 预览等核心功能。 - -### Interceptor - -Interceptor 是 Dinky 的 Flink 执行拦截器,负责对其进行片段解析、UDF注册、SET 和 AGGTABLE 等增强语法解析。 - -### Gateway - -Gateway 并非是开源项目 flink-sql-gateway,而是 Dinky 自己定制的 Gateway,负责进行基于 Yarn 环境的任务提交与管理,主要有Yarn-Per-Job 和 Yarn-Application 的 FlinkSQL 提交、停止、SavePoint 以及配置测试,而 User Jar 目前只开放了 Yarn-Application 的提交。 - -### Flink SDK - -Dinky 主要通过调用 flink-client 和 flink-table 模块进行二次开发。 - -### Yarn SDK - -Dinky 通过调用 flink-yarn 模块进行二次开发。 - -### Flink API - -Dinky 也支持通过调用 JobManager 的 RestAPI 对任务进行管理等操作,系统配置可以控制开启和停用。 - -### Yarn-Session - -Dinky 通过已注册的 Flink Session 集群实例可以对 Standalone 和 Yarn-Session 两种集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。 - -### Yarn-Per-Job - -Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例,然后将本地解析生产的 JobGraph 与 Configuration 提交至 Yarn 来创建 Flink-Per-Job 应用。 - -### Yarn-Application - -Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对于 User Jar,将 Jar 相关配置与 Configuration 提交至 Yarn 来创建 Flink-Application 应用;对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和 dlink-app.jar 以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。 - -## 功能 - -注意:以下功能均为对应版本已实现的功能,实测可用。 - -| 应用 | 方向 | 功能 | 进展 | -|:-------:|:----------:|-------------------------------------------|:-----:| -| 开发中心 | FlinkSQL | 支持 sql-client 所有语法 | 0.4.0 | -| | | 支持 Flink 所有 Configuration | 0.4.0 | -| | | 支持 Flink 所有 Connector | 0.4.0 | -| | | 支持 SELECT、SHOW 等查询实时预览 | 0.4.0 | -| | | 支持 INSERT 语句集 | 0.4.0 | -| | | 新增 SQL 片段语法 | 0.4.0 | -| | | 新增 AGGTABLE 表值聚合语法及 UDATF 支持 | 0.4.0 | -| | | 新增 CDCSOURCE 多源合并语法支持 | 0.6.0 | -| | | 新增 FlinkSQLEnv 执行环境复用 | 0.5.0 | -| | | 新增 Flink Catalog 交互查询 | 0.4.0 | -| | | 新增 执行环境的共享与私有会话机制 | 0.4.0 | -| | | 新增 多种方言的作业目录管理(FlinkSQL、SQL、Java) | 0.5.0 | -| | | 新增 作业配置与执行配置管理 | 0.4.0 | -| | | 新增 基于 Explain 的语法校验与逻辑解析 | 0.4.0 | -| | | 新增 JobPlan 图预览 | 0.5.0 | -| | | 新增 基于 StreamGraph 的表级血缘分析 | 0.4.0 | -| | | 新增 基于上下文元数据自动提示与补全 | 0.4.0 | -| | | 新增 自定义规则的自动提示与补全 | 0.4.0 | -| | | 新增 关键字高亮与代码缩略图 | 0.4.0 | -| | | 新增 选中片段执行 | 0.4.0 | -| | | 新增 布局拖拽 | 0.4.0 | -| | | 新增 SQL导出 | 0.5.0 | -| | | 新增 快捷键保存、校验、美化 | 0.5.0 | -| | | 支持 local 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 standalone 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 yarn session 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 yarn per-job 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 yarn application 模式下 FlinkSQL 提交 | 0.4.0 | -| | | 支持 kubernetes session 模式下 FlinkSQL 提交 | 0.5.0 | -| | | 支持 kubernetes application 模式下 FlinkSQL 提交 | 0.5.0 | -| | | 支持 UDF Java 方言Local模式在线编写、调试、动态加载 | 0.5.0 | -| | Flink 作业 | 支持 yarn application 模式下 Jar 提交 | 0.4.0 | -| | | 支持 k8s application 模式下 Jar 提交 | 0.5.0 | -| | | 支持 作业 Cancel | 0.4.0 | -| | | 支持 作业 SavePoint 的 Cancel、Stop、Trigger | 0.4.0 | -| | | 新增 作业自动从 SavePoint 恢复机制(包含最近、最早、指定一次) | 0.4.0 | -| | Flink 集群 | 支持 查看已注册集群的作业列表与运维 | 0.4.0 | -| | | 新增 自动注册 Yarn 创建的集群 | 0.4.0 | -| | SQL | 新增 外部数据源的 SQL 校验 | 0.5.0 | -| | | 新增 外部数据源的 SQL 执行与预览 | 0.5.0 | -| | BI | 新增 折线图的渲染 | 0.5.0 | -| | | 新增 条形图图的渲染 | 0.5.0 | -| | | 新增 饼图的渲染 | 0.5.0 | -| | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 | -| | | 新增 FlinkSQL 和 SQL 的自动生成 | 0.6.0 | -| | 归档 | 新增 执行与提交历史 | 0.4.0 | -| 运维中心 | 暂无 | 暂无 | 0.4.0 | -| 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 | -| | | 新增 外部 Flink 集群实例心态检测与版本获取 | 0.4.0 | -| | | 新增 外部 Flink 集群手动一键回收 | 0.4.0 | -| | Flink 集群配置 | 新增 Flink On Yarn 集群配置注册及测试 | 0.4.0 | -| | User Jar | 新增 外部 User Jar 注册 | 0.4.0 | -| | 数据源 | 新增 Mysql 数据源注册及测试 | 0.4.0 | -| | | 新增 Oracle 数据源注册及测试 | 0.4.0 | -| | | 新增 postgreSql 数据源注册及测试 | 0.4.0 | -| | | 新增 ClickHouse 数据源注册及测试 | 0.4.0 | -| OpenApi | 调度 | 新增 submitTask 调度接口 | 0.5.0 | -| | FlinkSQL | 新增 executeSql 提交接口 | 0.5.0 | -| | | 新增 explainSql 验证接口 | 0.5.0 | -| | | 新增 getJobPlan 计划接口 | 0.5.0 | -| | | 新增 getStreamGraph 计划接口 | 0.5.0 | -| | | 新增 getJobData 数据接口 | 0.5.0 | -| | Flink | 新增 executeJar 提交接口 | 0.5.0 | -| | | 新增 cancel 停止接口 | 0.5.0 | -| | | 新增 savepoint 触发接口 | 0.5.0 | -| 关于 | 关于 Dinky | 版本更新记录 | 0.4.0 | - -## 近期计划 - -1.任务生命周期管理 - -2.作业监控及运维 - -3.流作业自动恢复 - -4.作业日志查看 - -5.钉钉报警和推送 - -## 致谢 - -[Apache Flink](https://github.com/apache/flink) - -[Mybatis Plus](https://github.com/baomidou/mybatis-plus) - -[ant-design-pro](https://github.com/ant-design/ant-design-pro) - -[Monaco Editor](https://github.com/Microsoft/monaco-editor) - -[SpringBoot]() - -[docsify](https://github.com/docsifyjs/docsify/) - -此外,感谢 [JetBrains](https://www.jetbrains.com/?from=dlink) 提供的免费开源 License 赞助 - -[![JetBrains](https://github.com/DataLinkDC/dlink/raw/main/dlink-doc/images/main/jetbrains.svg)](https://www.jetbrains.com/?from=dlink) - -## 交流与贡献 - -欢迎您加入社区交流分享,也欢迎您为社区贡献自己的力量。 - -在此非常感谢大家的支持~ - -QQ社区群:**543709668**,申请备注 “ Dinky ”,不写不批 - -微信社区群(推荐):添加微信号 wenmo_ai 邀请进群,申请备注 “ Dinky + 企业名 + 职位”,不写不批 - -公众号(最新消息获取建议关注):[DataLink数据中台](https://mmbiz.qpic.cn/mmbiz_jpg/dyicwnSlTFTp6w4PuJruFaLV6uShCJDkzqwtnbQJrQ90yKDuuIC8tyMU5DK69XZibibx7EPPBRQ3ic81se5UQYs21g/0?wx_fmt=jpeg) \ No newline at end of file diff --git a/docs/guide/roadmap.md b/docs/guide/roadmap.md deleted file mode 100644 index 992df44f42..0000000000 --- a/docs/guide/roadmap.md +++ /dev/null @@ -1,154 +0,0 @@ -### 任务生命周期管理 - -FlinkSQL 生命周期:创建、开发、调试、发布、上线、注销。 - -Dlink 的 FlinkSQL Studio 负责 FlinkSQL 的开发和调试,在确定最终的 SQL 口径及任务配置后,可通过任务发布功能自动地在运维中心注册测试或生产环境下的最终任务,同时具备版本的管理,将开发与运维分离,保证生产环境的稳定性。 - -在运维中心可以上线已发布的任务,或者将已上线的任务进行下线,然后可以通过维护功能将任务重新进入开发和调试的进度。 - -最后,可以在运维中心注销已经不需要或者错误的任务,将被彻底删除。 - -### 元数据管理 - -Dlink 目前支持对外部元数据的采集功能,将建设统一的元数据管理,使其可以不需要依赖第三方元数据平台,独自进行更加适应实时数仓的元数据消费操作,统一规范拥有大量数据表、复杂关系的建设需求。 - -元数据主要包含采集、构建、管理、同步功能。 - -采集:Dlink 通过 SPI 来扩展实现更多数据源的元数据采集功能,使其可以轻松对接第三方存储库、元数据平台等,甚至可以将消息队列的元数据采集进行扩展,以便于洞悉实时数仓的流数据结构。 - -构建:Dlink 提供构建逻辑表、字段、关系的能力,解耦外部存储层。通过词根维护来规范命名定义。 - -管理:Dlink 支持对逻辑表和物理表的结构的可视化管理能力,可添加物理表不支持的信息如标签、分类、注释、权限等。 - -同步:Dlink 支持自动或手动地将元数据变动同步至对应数据源,或根据逻辑表在数据源上创建物理表。 - -### 血缘和影响分析 - -Dlink 目前具备任务表级的 FlinkSQL 血缘分析,通过 FlinkSQL 解析并构造后的 StreamGraph 来获取血缘关系,规避了冗余 Create Table 等的影响,同时支持多 Create View 的语句,使 FlinkSQL 结构更加清晰明了易于维护。 - -FlinkSQL 任务被发布到运维中心时,会自动生成血缘关系,与元数据管理的元数据信息做对应,进而形成全局的数据链路关系,便同时得到了影响分析。拥有了血缘和影响分析,便更加方便的管理和优化所有的数据任务。 - -处在 Studio 开发环节的任务,则可以根据已发布的任务构成的数据链路关系来获取自身的全局血缘及影响分析。 - -单从血缘分析来说,含有表级、字段级、记录级。Dlink 将完善字段级血缘并开放,记录级则是未来探索的一个方向,记录级的血缘将会更直观地展现出数据的治理过程,便于排查数据内容问题。 - -### 集群运维 - -Dlink 目前的 FlinkSQL 敏捷需要提取部署好外部的环境才能使用,而该过程目前是通过人工手动进行,需要进行复杂的运维操作,此外还要解决因依赖导致的各种问题。 - -Dlink 将对集群环境的搭建和启停等操作进行自动化地支持。 - -首先配置免密通信集群的节点信息,将部署资源提前放到 Dlink 目录下或通过镜像地址进行下载,通过集群模板的配置来分发和部署所使用的 Flink 资源及其他资源,若为 K8S 环境则打包镜像并装载至容器。资源到位后可直接通过 Dlink 启动对应集群如 Standalone 、Yarn-Session 和 K8S-Session等。做到集群部署运维托管 Dlink 。 - -### 运行监控 - -Dlink 需要对集群资源及 Flink 作业进行时序监控,支持外部对接 Prometheus 消费定制化的时序数据。 - -Dlink 通过 SPI 的方式来实现自定义监控接口实现,使其可以插件化地管理不同的中间件的不同的 Metrics 的实现或者对接外部 Metrics 采集组件。 - -Dlink 通过 JobManager 对 Flink 作业进行状态监控,反馈异常的指标,辅助用户对作业进行口径或者参数优化。 - -### 报警推送 - -Dlink 通过 SPI 来扩展报警方式,将先实现钉钉的报警插件,后续企业号、邮箱等留给社区贡献开发。 - -Dlink 通过自定义报警规则及内容模板来触发报警或者推送报表,使用户第一时间知晓生产环境的异常状况以及其自定义的报表及推送信息如批流任务启停、依赖任务启停、集群操作推送等。 - -### 依赖调度 - -Dlink 定位是批流一体平台,不排除用户存在大量的复杂依赖关系的调度需求。 - -Dlink 提供依赖调度引擎,通过全局的数据链路关系自动获得任务的 DAG 图,根据指定的依赖调度作业参数手动或定时拉起守护线程 Daemon,Daemon 通过子调度组、 DAG 及节点权重、并行度、黑名单、超时时间、异常处理策略、任务历史执行信息、运行监控反馈的资源信息等来通过 SDJF(短依赖作业优先)算法进行大量依赖作业的动态调度编排,合理充分利用资源的同时缩短整个数仓的数据同步周期。Daemon 触发报警规则或异常时会进行报警,执行完所有的任务后会触发推送,并根据后驱依赖调度组配置进行递归调度。 - -在容错方面,Daemon 可以在异常任务处跳过当前节点或后续影响节点,也可触发停止并报警。当 Daemon 因异常原因停止后,由于其自身状态信息根据归档周期进行持久化存储,所以可以从最新的快照恢复 Daemon ,从而恢复后续任务的正常执行。当然可以对Daemon进行暂停、或停止操作,进行作业维护,维护成功后可以恢复执行。 - -以上的特性将使用户无需梳理复杂的依赖关系或者手动配置 DAG,也不需要估测调度间隔或者长期观察任务执行情况进行手动优化。由于 Daemon 依据任务历史执行数据作为调度影响因子,随着时间的推移会自动编排出最合适的并行调度计划(类似于机器学习)。此外由于子依赖调度组的设计可以在执行前合并子组的 DAG,使用户可以将大量任务以业务主题划分调度组,更有利于作业的维护,而其后驱依赖调度组的设计则可以以时序的方式隔离两个调度组,实现隔离 DAG 调度。 - -### 作业自动恢复 - -Dlink 批流一体的发展趋势必然会出现越来越多的流或批流一体任务。 - -而其守护线程 Daemon 分为两者,一种是上文说到的依赖调度守护线程,另一种则是实时任务守护线程。在实时任务守护线程下,Daemon 支持根据 savepoint 周期配置项来周期性地进行 savepoint 的触发,满足在任务异常失败后自动从 savepoint 恢复的机制,checkpoint 则依赖 Flink 自身的恢复能力自动从 checkpoint 恢复任务,当然也可以通过 RocksDB 管理 checkpoint 并存储至文件系统,Daemon 在任务异常失败后自动从 checkpoint 恢复。可见两种恢复机制的成本不一样,根据具体需求选择。周期性的备份状态自然会造成大量的冗余文件,可以配置保留的备份次数,自动清除过期状态。当作业超过失败重启次数后,Daemon 会自动报警;当满足推送周期可自动推送任务的运行信息。 - -### 守护进程 - -在RPC版本发布前,仍为守护线程,上文谈到了 Daemon 的两种线程分类,此外还一种守护进程,位于 RPC 版本。 - -在 RPC 版本中,上文所说的两种 Daemon 主线程会在运行期间周期地及手动触发地发送自身信息给 Daemon 进程,当 Daemon 在预计的延时内未接受到 Daemon 主线程的信息,会认为该线程异常中断,便远程通信使其自动从快照恢复。 - -守护进程 Daemon 还管理作业执行等线程,Dlink 的 FlinkSQL 作业提交看似简单,但其后台进行了复杂的多步处理如:准备执行环境、解析增强语法、组装语句集、解析翻译优化得到 JobGraph、获取 yarnClient、提交JobGraph、等待响应。提交线程将其进度以及需要持久化到数据库的信息发送给 Daemon,Daemon 负责管理以及委托持久化。当然也可以通过 Daemon 来中断提交线程。 - -此外 Daemon 也负责 dlink-client 、dlink-server 与 dlink-admin三个进程的实例管理,配合 dubbo 来治理服务及扩展新服务。 - -### 库表数据同步 - -Dlink 将提供基于 Flink 引擎的可视化构建库表数据同步任务的功能。 - -离线方面,Dlink 通过界面配置库表同步的作业配置,作业启动后,Dlink 从配置中获取数据源信息及库表选择信息等其他配置项,自动构建 Flink 批作业并交由 Daemon 依赖调度托管大量任务的有序稳定执行。 - -实时方面,Dlink 则根据配置信息自动构建 FlinkCDC 无锁作业,并交由 Daemon 实时任务守护进行流任务托管。 - -批流一体方面,Dlink 则将由上述两个 Daemon 协作完成,后者启动流任务后,前者通过批任务完成历史数据合并,或直接使用 FlinkCDC自带的批流一体读取来实现同步,具体按需求选择。 - -以上数据同步任务的定义将提供 SQL 语句 create datasync 来实现一句 SQL 定义任务的效果。 - -### 企业级功能 - -Dlink 将提供轻量的企业管理能力,如多租户、项目、角色、权限、审计。 - -此外 Dlink 将重新设计后台架构,使其更加解耦且插件化,基于服务的治理来满足大型场景的建设需求。 - -### 多版本 Flink-Client Server - -在单机版本中,dlink-client 的执行环境所需要的依赖均从项目的 lib 和 plugins 目录下加载,一个 Dlink 实例只能部署一个版本的 Flink 环境。 - -在 RPC 版本中,将通过服务治理来同时支持不同版本的 dlink-client 任务提交。dlink-admin 管理 Flink-Client Server,通知 dlink-server 来启动 dlink-client,dlink-client 可以根据指定的依赖启动对应的 Flink Client环境并久驻,也可以根据环境变量来作为插件部署到 Flink 集群直接启动对应的 Flink Client环境并久驻。 - -Dlink 的任务在提交时,会根据指定集群实例或集群配置来获取对应版本号或者指定的 Flink-Client Server 来选择对应的 Flink-Client Server 进行任务的提交等其他操作。 - -### Flink StreamGraph 和 JobGraph 的可视化修改 - -Dlink 将提供 StreamGraph 和 JobGraph 两种状态下的任务计划可视化修改功能,如修改 StreamGraph 的算子并行度、自动追加 Sink 等。还支持将 Jar 提交任务在 dlink-client 转换成 StreamGraph 和 JobGraph ,然后进行分析、修改及统一提交,这样 Jar 任务也将可以得到血缘分析,进而可以被合并到数据链路图,被依赖调度一起托管。 - -### Flink 自动化动态扩缩容 - -Flink 流任务的动态扩缩容是个降本增效的好措施,Dlink 将提供自动化的自动动态扩缩容来应对 Reactive Mode 和非 Reactive Mode 两种场景。 - -首先 Dlink 会通过运行监控接口获取流作业的时序资源占用数据,以天级别或周级别甚至月级别来计算和评估资源的占用模型。 - -对于 Reactive Mode ,即 Flink 1.13 之后的 Standalone Application Mode 模式下,可通过 Kubernetes Horizontal Pod Autoscaler 进行自动扩缩容。 - -而对于非 Reactive Mode ,Dlink 将通过 Daemon 依据资源预测模型进行周期性的作业调整并行度等其他优化配置和重启作业来完成较高成本的自动化动态扩缩容。 - -### FlinkSQL OLAP & BI - -Dlink 将投入更多精力来优化基于 FlinkSQL 来进行 OLAP 查询和查询结果BI化,使其可以通过柱状图、折线图、饼图等直观地展现出数据特征。 - -在 FlinkSQL OLAP 方面,一是,Dlink 将优化 Session 模式的作业提交效率与作业配置,逐步减少整个查询请求的响应时间;二是,Dlink 将自动装载指定数据源的元数据到对应会话中,使其 SQL 开发只需要关注 select 的口径,无需再次编写 set 和 create。 - -在 BI 方面,Dlink 将 FlinkSQL 及其他查询引擎如 jdbc 的查询结果进行自动化的转换,将表格数据转换为柱状图、折线图、饼图等其他图形所需要的数据格式,并进行渲染,便于数据科学家更值观地分析数据。 - -### FlinkSQL 翻译及生成 - -Dlink 将提供 FlinkSQL 翻译功能,该功能可以将传统 SQL 如 Mysql、Oracle 等 DDL 、DQL 语句翻译为 FlinkSQL 语句,便于作业迁移和降低门槛。通过SPI来扩展其他 Dialect 的转换。 - -Dlink也将提供 FlinkSQL 生成功能,通过元数据来生成 DDL,自动对齐 insert into select 等,使 FlinkSQL 开发更加便捷。 - -### Dlink-Jdbc - -Dlink 将提供自身 jdbc 组件来便捷基于 Dlink 引擎的 FlinkSQL 任务提交。第三方系统(业务系统、数据库工具、调度平台、BI平台等等使用 jdbc 的系统)通过引入 dlink-jdbc.jar,如同开发 Mysql 的 jdbc 应用操作来执行 FlinkSQL,与 dlink-server 进行通信,dlink-server 根据 url 参数配置在对应版本的 dlink-client 上执行其 FlinkSQL。 - -### FlinkSQL Studio 交互优化 - -Dlink 目前提供了简陋的 Studio ,虽然可以满足基本的开发需求,但 Studio 其他功能同样对开发调试具有重大影响,如项目导入导出、文件导入导出、开发Demo、配置模板、执行日志、SQL 对比等功能。 - -Dlink 除了将逐步完成以上功能外,还要进行交互上的优化,使其更加接近专业的 IDE,如风格切换、面板调整、定时保存、History对比和恢复等。 - -### 实践分享 - -Dlink 将投入更多精力围绕业界主流的存储架构、平台等进行应用实践分享。 - -Dlink 通过用户在生产上对接各种生态的实践进行总结和整理,最终在公众号、官网中分享各实践主题下的用户经验与操作说明,如 FlinkCDC、Hive、ClickHouse、Doris、Hudi、Iceberg 等基于 Dlink 快速落地的经验。 - -Dlink 也将积极对接其他开源平台如 Linkis、AirFlow、DolphinScheduler、DataSphere Studio 等,使其可以为各平台在 Flink 支持上提供更多一种的选择,也将实现对应的批量作业导入功能,使其可以低成本地迁移作业。 - diff --git a/docs/i18n/zh-cn/code.json b/docs/i18n/zh-cn/code.json new file mode 100644 index 0000000000..841d50adfe --- /dev/null +++ b/docs/i18n/zh-cn/code.json @@ -0,0 +1,225 @@ +{ + "theme.ErrorPageContent.title": { + "message": "这个页面崩溃了.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.ErrorPageContent.tryAgain": { + "message": " 再试一次 ", + "description": "The label of the button to try again when the page crashed" + }, + "theme.NotFound.title": { + "message": "找不到页面", + "description": "The title of the 404 page" + }, + "theme.NotFound.p1": { + "message": "我们找不到你要找的东西.", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": " 请联系将您链接到原始URL的网站的所有者,并让他们知道他们的链接已断开 .", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "回到顶部", + "description": "The ARIA label for the back to top button" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "关闭", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.blog.archive.title": { + "message": "归档", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "归档文件", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "博客列表页面导航", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "上篇博客", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "下篇博客", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.readingTime.plurals": { + "message": " 阅读于 {readingTime} 分钟前 ", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.post.readMoreLabel": { + "message": "阅读更多关于 {title}", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readMore": { + "message": "阅读更多...", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "博客页面导航", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "上篇博客", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "下篇博客", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "博客列表", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.blog.post.plurals": { + "message": " {count} 个博客 ", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} 标记为 \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "查看所有标签", + "description": "The label of the link targeting the tag list page" + }, + "theme.colorToggle.ariaLabel": { + "message": "在暗黑模式和明亮模式之间切换 (当前是 {mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "暗黑模式", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "明亮模式", + "description": "The name for the light color mode" + }, + "theme.docs.DocCard.categoryDescription": { + "message": "{count} 条记录", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "展开侧边栏", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "展开侧边栏", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "文档页面导航", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "上篇文档", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "下篇文档", + "description": "The label used to navigate to the next doc" + }, + "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { + "message": "切换可折叠边栏类别 '{label}'", + "description": "The ARIA label to toggle the collapsible sidebar category" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": " 一个文档标记|{count}个文档标记 ", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": " 带有 {nDocsTagged} 的 \"{tagName}\"", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "版本: {versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "此为 {siteTitle} {versionLabel} 版本. 此版本尚未发行.", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "这是 {siteTitle} {versionLabel} 的文档, 它已不再有效维护.", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "最新文档请参阅 {latestVersionLink} ({versionLabel}).", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "最新版本", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "编辑此页面", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "直接链接到标题", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": " 更新于 {date}", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " 由 {user}", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": " 最后更新时间: {atDate} {byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "所有版本", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.common.skipToMainContent": { + "message": "跳到主要内容", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsListLabel": { + "message": "标签:", + "description": "The label alongside a tag list" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "在此页上", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.CodeBlock.copied": { + "message": "复制", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "将代码复制到剪贴板", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "复制", + "description": "The copy button label on code blocks" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "语言", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "折叠边栏", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "折叠边栏", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← 返回主页", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.tags.tagsPageTitle": { + "message": "标签列表:", + "description": "The title of the tag list page" + } +} diff --git a/docs/i18n/zh-cn/docusaurus-plugin-content-blog/options.json b/docs/i18n/zh-cn/docusaurus-plugin-content-blog/options.json new file mode 100644 index 0000000000..33358a160c --- /dev/null +++ b/docs/i18n/zh-cn/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "博客", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "博客", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "博客列表", + "description": "The label for the left sidebar" + } +} diff --git a/docs/i18n/zh-cn/docusaurus-plugin-content-docs-download/current.json b/docs/i18n/zh-cn/docusaurus-plugin-content-docs-download/current.json new file mode 100644 index 0000000000..dd30528de7 --- /dev/null +++ b/docs/i18n/zh-cn/docusaurus-plugin-content-docs-download/current.json @@ -0,0 +1,6 @@ +{ + "version.label": { + "message": "Next", + "description": "The label for version current" + } +} diff --git a/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current.json b/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current.json new file mode 100644 index 0000000000..087f9f5a35 --- /dev/null +++ b/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,110 @@ +{ + "version.label": { + "message": "Next", + "description": "The label for version current" + }, + "sidebar.tutorialSidebar.category.概念和架构": { + "message": "概念和架构", + "description": "The label for category 概念和架构 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.编译和部署": { + "message": "编译和部署", + "description": "The label for category 编译和部署 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.快速入门": { + "message": "快速入门", + "description": "The label for category 快速入门 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.操作指南": { + "message": "操作指南", + "description": "The label for category 操作指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.FlinkSQL 操作指南": { + "message": "FlinkSQL 操作指南", + "description": "The label for category FlinkSQL 操作指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.SQL 开发指南": { + "message": "SQL 开发指南", + "description": "The label for category SQL 开发指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.使用手册": { + "message": "使用手册", + "description": "The label for category 使用手册 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.数据开发": { + "message": "数据开发", + "description": "The label for category 数据开发 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.基本介绍": { + "message": "基本介绍", + "description": "The label for category 基本介绍 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Catalog 管理": { + "message": "Catalog 管理", + "description": "The label for category Catalog 管理 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.运维中心": { + "message": "运维中心", + "description": "The label for category 运维中心 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.作业管理": { + "message": "作业管理", + "description": "The label for category 作业管理 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.作业调优": { + "message": "作业调优", + "description": "The label for category 作业调优 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.作业监控": { + "message": "作业监控", + "description": "The label for category 作业监控 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.注册中心": { + "message": "注册中心", + "description": "The label for category 注册中心 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.系统设置": { + "message": "系统设置", + "description": "The label for category 系统设置 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.扩展": { + "message": "扩展", + "description": "The label for category 扩展 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.功能扩展": { + "message": "功能扩展", + "description": "The label for category 功能扩展 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.实践指南": { + "message": "实践指南", + "description": "The label for category 实践指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.开发者指南": { + "message": "开发者指南", + "description": "The label for category 开发者指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.参与贡献": { + "message": "参与贡献", + "description": "The label for category 参与贡献 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.DDL 语句": { + "message": "DDL 语句", + "description": "The label for category DDL 语句 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.DML 语句": { + "message": "DML 语句", + "description": "The label for category DML 语句 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.数据集成指南": { + "message": "数据集成指南", + "description": "The label for category 数据集成指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.用户手册": { + "message": "用户手册", + "description": "The label for category 用户手册 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category. Connector": { + "message": " Connector", + "description": "The label for category Connector in sidebar tutorialSidebar" + } +} diff --git a/docs/i18n/zh-cn/docusaurus-plugin-content-docs/version-0.6.json b/docs/i18n/zh-cn/docusaurus-plugin-content-docs/version-0.6.json new file mode 100644 index 0000000000..140fc700f1 --- /dev/null +++ b/docs/i18n/zh-cn/docusaurus-plugin-content-docs/version-0.6.json @@ -0,0 +1,82 @@ +{ + "version.label": { + "message": "0.6", + "description": "The label for version 0.6" + }, + "sidebar.tutorialSidebar.category.概念和架构": { + "message": "概念和架构", + "description": "The label for category 概念和架构 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.编译和部署": { + "message": "编译和部署", + "description": "The label for category 编译和部署 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.操作指南": { + "message": "操作指南", + "description": "The label for category 操作指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.SQL 开发指南": { + "message": "SQL 开发指南", + "description": "The label for category SQL 开发指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.DDL 语句": { + "message": "DDL 语句", + "description": "The label for category DDL 语句 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.DML 语句": { + "message": "DML 语句", + "description": "The label for category DML 语句 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.数据集成指南": { + "message": "数据集成指南", + "description": "The label for category 数据集成指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.用户手册": { + "message": "用户手册", + "description": "The label for category 用户手册 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.数据开发": { + "message": "数据开发", + "description": "The label for category 数据开发 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.基本介绍": { + "message": "基本介绍", + "description": "The label for category 基本介绍 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.运维中心": { + "message": "运维中心", + "description": "The label for category 运维中心 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.注册中心": { + "message": "注册中心", + "description": "The label for category 注册中心 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.系统设置": { + "message": "系统设置", + "description": "The label for category 系统设置 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category. Connector": { + "message": " Connector", + "description": "The label for category Connector in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.开发者指南": { + "message": "开发者指南", + "description": "The label for category 开发者指南 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.参与贡献": { + "message": "参与贡献", + "description": "The label for category 参与贡献 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.扩展": { + "message": "扩展", + "description": "The label for category 扩展 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.功能扩展": { + "message": "功能扩展", + "description": "The label for category 功能扩展 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.实践指南": { + "message": "实践指南", + "description": "The label for category 实践指南 in sidebar tutorialSidebar" + } +} diff --git a/docs/i18n/zh-cn/docusaurus-theme-classic/footer.json b/docs/i18n/zh-cn/docusaurus-theme-classic/footer.json new file mode 100644 index 0000000000..dd60969540 --- /dev/null +++ b/docs/i18n/zh-cn/docusaurus-theme-classic/footer.json @@ -0,0 +1,46 @@ +{ + "link.title.Docs": { + "message": "Docs", + "description": "The title of the footer links column with title=Docs in the footer" + }, + "link.title.Community": { + "message": "Community", + "description": "The title of the footer links column with title=Community in the footer" + }, + "link.title.More": { + "message": "More", + "description": "The title of the footer links column with title=More in the footer" + }, + "link.item.label.文档首页": { + "message": "文档首页", + "description": "The label of footer link with label=文档首页 linking to /docs/intro" + }, + "link.item.label.Open Api": { + "message": "Open Api", + "description": "The label of footer link with label=Open Api linking to /docs/administrator_guide/studio/openapi" + }, + "link.item.label.Discussions": { + "message": "Discussions", + "description": "The label of footer link with label=Discussions linking to https://github.com/DataLinkDC/dlink/discussions" + }, + "link.item.label.Issue": { + "message": "Issue", + "description": "The label of footer link with label=Issue linking to https://github.com/DataLinkDC/dlink/issues" + }, + "link.item.label.Pull Request": { + "message": "Pull Request", + "description": "The label of footer link with label=Pull Request linking to https://github.com/DataLinkDC/dlink/pulls" + }, + "link.item.label.GitHub": { + "message": "GitHub", + "description": "The label of footer link with label=GitHub linking to https://github.com/DataLinkDC/dlink" + }, + "copyright": { + "message": "Copyright © 2022 Dinky, Inc. DataLinkDC.", + "description": "The footer copyright" + }, + "link.item.label.博客": { + "message": "博客", + "description": "The label of footer link with label=最新动态 linking to /blog" + } +} diff --git a/docs/i18n/zh-cn/docusaurus-theme-classic/navbar.json b/docs/i18n/zh-cn/docusaurus-theme-classic/navbar.json new file mode 100644 index 0000000000..55f929d567 --- /dev/null +++ b/docs/i18n/zh-cn/docusaurus-theme-classic/navbar.json @@ -0,0 +1,66 @@ +{ + "title": { + "message": "Dinky", + "description": "The title in the navbar" + }, + "item.label.主页": { + "message": "主页", + "description": "Navbar item with label 主页" + }, + "item.label.文档": { + "message": "文档", + "description": "Navbar item with label 文档" + }, + "item.label.下载": { + "message": "下载", + "description": "Navbar item with label 下载" + }, + "item.label.开发者指南": { + "message": "开发者指南", + "description": "Navbar item with label 开发者指南" + }, + "item.label.GitHub": { + "message": "GitHub", + "description": "Navbar item with label GitHub" + }, + "item.label.Next": { + "message": "Next", + "description": "Navbar item with label Next" + }, + "item.label.0.6.1": { + "message": "0.6.1", + "description": "Navbar item with label 0.6.1" + }, + "item.label.0.6.0": { + "message": "0.6.0", + "description": "Navbar item with label 0.6.0" + }, + "item.label.All Versions": { + "message": "All Versions", + "description": "Navbar item with label All Versions" + }, + "item.label.如何参与": { + "message": "如何参与", + "description": "Navbar item with label 如何参与" + }, + "item.label.本地调试": { + "message": "本地调试", + "description": "Navbar item with label 本地调试" + }, + "item.label.远程调试": { + "message": "远程调试", + "description": "Navbar item with label 远程调试" + }, + "item.label.debug": { + "message": "debug", + "description": "Navbar item with label debug" + }, + "item.label.博客": { + "message": "博客", + "description": "Navbar item with label 博客" + }, + "item.label.0.6": { + "message": "0.6", + "description": "Navbar item with label 0.6" + } +} diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 1fe19cb516..0000000000 --- a/docs/index.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - Document - - - - - - - - -
加载中
- - - - - - - - - - - - - diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000000..fc38deeaed --- /dev/null +++ b/docs/package.json @@ -0,0 +1,40 @@ +{ + "name": "dinky-website", + "version": "1.0.0", + "private": true, + "scripts": { + "clear": "docusaurus clear", + "build": "docusaurus build", + "start": "docusaurus start", + "deploy": "docusaurus deploy", + "docusaurus": "docusaurus", + "swizzle": "docusaurus swizzle", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids" + }, + "dependencies": { + "@docusaurus/core": "2.0.0-beta.18", + "@docusaurus/plugin-content-docs": "2.0.0-beta.18", + "@docusaurus/preset-classic": "2.0.0-beta.18", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.1.1", + "less-loader":"10.2.0", + "docusaurus-plugin-less": "^2.0.2", + "prism-react-renderer": "^1.3.1", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/docs/share/yarnsubmit.md b/docs/share/yarnsubmit.md deleted file mode 100644 index 779acd11fe..0000000000 --- a/docs/share/yarnsubmit.md +++ /dev/null @@ -1,199 +0,0 @@ -## Yarn-Session 实践 - -### 注册 Session 集群 - -![image-20211128225423360](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6iaAIees3BsUONXbIocdRUI0WWVSzibPpltibBbMmWgfWJ0AklUlPF9Ugw/0?wx_fmt=png) - -进入集群中心进行远程集群的注册。点击新建按钮配置远程集群的参数。图中示例配置了一个 Flink on Yarn 的高可用集群,其中 JobManager HA 地址需要填写集群中所有可能被作为 JobManager 的 RestAPI 地址,多个地址间使用英文逗号分隔。表单提交时可能需要较长时间的等待,因为 dlink 正在努力的计算当前活跃的 JobManager 地址。 - -保存成功后,页面将展示出当前的 JobManager 地址以及被注册集群的版本号,状态为正常时表示可用。 - -注意:只有具备 JobManager 实例的 Flink 集群才可以被成功注册到 dlink 中。( Yarn-Per-Job 和 Yarn-Application 也具有 JobManager,当然也可以手动注册,但无法提交任务) - -如状态异常时,请检查被注册的 Flink 集群地址是否能正常访问,默认端口号为8081,可能更改配置后发生了变化,查看位置为 Flink Web 的 JobManager 的 Configuration 中的 rest 相关属性。 - -### 执行 Hello World - -万物都具有 Hello World 的第一步,当然 dlink 也是具有的。我们选取了基于 datagen 的流查询作为第一行 Flink Sql。具体如下: - -```sql -CREATE TABLE Orders ( - order_number BIGINT, - price DECIMAL(32,2), - buyer ROW, - order_time TIMESTAMP(3) -) WITH ( - 'connector' = 'datagen', - 'rows-per-second' = '1' -); -select order_number,price,order_time from Orders -``` - -该例子使用到了 datagen,需要在 dlink 的 plugins 目录下添加 flink-table.jar。 - -点击 Flink Sql Studio 进入开发页面: - -![image-20211128230416447](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6RuS3kibG0jJnDjoUicX7sN63UN6j7Osg4lWh5SelOw0hp4Vj6icFAuDkA/0?wx_fmt=png) - -在中央的编辑器中编辑 Flink Sql。 - -右边作业配置: - -1. 执行模式:选中 yarn-session; -2. Flink 集群:选中上文注册的测试集群; -3. SavePoint 策略:选中禁用; -4. 按需进行其他配置。 - -右边执行配置: - -1. 预览结果:启用; -2. 远程执行:启用。 - -点击快捷操作栏的三角号按钮同步执行该 FlinkSQL 任务。 - -### 预览数据 - -![image-20211128231230335](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6leQx4mfqsdwVftlEUXSFWnEzOTJGrCGHUKo98SpIn11WkZquEwwjpg/0?wx_fmt=png) - -切换到历史选项卡点击刷新可以查看提交进度。切换到结果选项卡,等待片刻点击获取最新数据即可预览 SELECT。 - -### 停止任务 - -![image-20211128231523703](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6koYZDQqzsawPOCTP64ycdUZlib5oJA9vo9fpX43DNTmibY60ojZv44zQ/0?wx_fmt=png) - -切换到进程选项卡,选则对应的集群实例,查询当前任务,可执行停止操作。 - -## Yarn-Per-Job 实践 - -### 注册集群配置 - -进入集群中心——集群配置,注册配置。 - -![image-20211128231914983](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6Vcw98k4yfgR2dSo3BUhxdtpRdd8A7NLyXkZhFibhiciarp9DTY415UehQ/0?wx_fmt=png) - -1. Hadoop 配置文件路径:指定配置文件路径(末尾无/),需要包含以下文件:core-site.xml,hdfs-site.xml,yarn-site.xml; -2. Flink 配置 lib 路径:指定 lib 的 hdfs 路径(末尾无/),需要包含 Flink 运行时的所有依赖,即 flink 的 lib 目录下的所有 jar; -3. Flink 配置文件路径:指定配置文件 flink-conf.yaml 的具体路径(末尾无/); -4. 按需配置其他参数(重写效果); -5. 配置基本信息(标识、名称等); -6. 点击测试或者保存。 - -### 执行升级版 Hello World - -之前的 hello world 是个 SELECT 任务,改良下变为 INSERT 任务: - -```sql -CREATE TABLE Orders ( - order_number INT, - price DECIMAL(32,2), - order_time TIMESTAMP(3) -) WITH ( - 'connector' = 'datagen', - 'rows-per-second' = '1', - 'fields.order_number.kind' = 'sequence', - 'fields.order_number.start' = '1', - 'fields.order_number.end' = '1000' -); -CREATE TABLE pt ( -ordertotal INT, -numtotal INT -) WITH ( - 'connector' = 'print' -); -insert into pt select 1 as ordertotal ,sum(order_number)*2 as numtotal from Orders -``` - -![image-20211128232734409](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6HU0ics1Er4CibiaRc8jndmc3rHX9J3ArSp4QF2qyARR46hPzOh0kDbYYQ/0?wx_fmt=png) - -编写 Flink SQL; - -作业配置: - -1. 执行模式:选中 yarn-per-job ; -2. Flink 集群配置:选中刚刚注册的配置; -3. SavePoint 策略:选中最近一次。 - -快捷操作栏: - -1. 点击保存按钮保存当前所有配置; -2. 点击小火箭异步提交作业。 - -![image-20211128233423276](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6OsQDhibZQbh1nXrx9d0OBiaiaibnIMnLcSfT3MNxhY9CEyAxrA9NLczohA/0?wx_fmt=png) - -注意,执行历史需要手动刷新。 - -### 自动注册集群 - -点击集群中心——集群实例,即可发现自动注册的 Per-Job 集群。 - -![image-20211128234056101](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6zCpJ7Knv1WYHTUxHt8iagpNNjRAPsPiaqBoD2xkLupcM7Op1Q48tb6ibQ/0?wx_fmt=png) - -### 查看 Flink Web UI - -提交成功后,点击历史的蓝色地址即可快速打开 Flink Web UI地址。 - -![image-20211128233735071](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6AQq5qVMAkwUM8WiaLnTrzDnSlLicTJZjWxowdW9dKUibNp33nrnHpL2Ng/0?wx_fmt=png) - -### 从 Savepoint 处停止 - -在进程选项卡中选择自动注册的 Per-Job 集群,查看任务并 SavePoint-Cancel。 - -![image-20211128234321656](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6jDvzsoHias24jAY6ElCFj6lFCX1jjdGmoGGa5vI5xgNSEUzyEiaZEZNA/0?wx_fmt=png) - -在右侧保存点选项卡可以查看该任务的所有 SavePoint 记录。 - -![image-20211128234619397](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6TGv1Gun2rB35Upv8hnsoeHzeDdFT4Ryag8icHz7BrzhE4YELiaMk7KYw/0?wx_fmt=png) - -### 从 SavePoint 处启动 - -再次点击小火箭提交任务。 - -![image-20211128235430989](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6WTchGqUeBiaNY5hT6tjQ611UaQA3jawOS4uQHrN65icia3d4qLAfZMEibg/0?wx_fmt=png) - -查看对应 Flink Web UI,从 Stdout 输出中证实 SavePoint 恢复成功。 - -## Yarn-Application 实践 - -### 注册集群配置 - -使用之前注册的集群配置即可。 - -### 上传 dlink-app.jar - -第一次使用时,需要将 dlink-app.jar 上传到 hdfs 指定目录,目录可修改如下: - -![image-20211128235914006](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6loq9rmu2tlkDvgSoD6WSlNBrniabV7MibNtSQrA2wKnCjKOzUGGiawW4g/0?wx_fmt=png) - -50070 端口 浏览文件系统如下: - -![image-20211129000047789](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X68kEAFYLBQpGcamP5djEaj9LiaLqlQCxVIXrbdFbgCb4Ct25HTAHCRIw/0?wx_fmt=png) - -### 执行升级版 Hello World - -作业配置: - -1. 执行模式:选中 yarn-application ; - -快捷操作栏: - -1. 点击保存按钮保存当前所有配置; -2. 点击小火箭异步提交作业。 - -### 其他同 Per-Job - -其他操作同 yarn-per-job ,本文不再做描述。 - -### 提交 User Jar - -作业中心—— Jar 管理,注册 User Jar 配置。 - -![image-20211129000804888](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6lGkXGSXSP9JyWTxc5rrh8zD9y5XYR9HkKxRRDicbUQicSFhaAAR0Ulxw/0?wx_fmt=png) - -右边作业配置的可执行 Jar 选择刚刚注册的 Jar 配置,保存后点击小火箭提交作业。 - -![image-20211129000933320](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6qyajpuR1OPlsFynwibdSRX3ECcRGGJPmutqyaibJbFS8HYCYic0rswuiaw/0?wx_fmt=png) - -由于提交了个批作业,Yarn 可以发现已经执行完成并销毁集群了。 - -![image-20211129001241101](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6UJbUIgHTSJHN29zicKuf761ERGnZHibMMURhuFpL2Iiah9LSiceTXIrAyg/0?wx_fmt=png) - diff --git a/docs/sidebars.js b/docs/sidebars.js new file mode 100644 index 0000000000..b845d0cddb --- /dev/null +++ b/docs/sidebars.js @@ -0,0 +1,48 @@ +/* + * + * 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. + * + *//** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + { + type: 'category', + label: 'Tutorial', + items: ['hello'], + }, + ], + */ +}; + +module.exports = sidebars; diff --git a/docs/src/components/HomepageFeatures/index.js b/docs/src/components/HomepageFeatures/index.js new file mode 100644 index 0000000000..d1e05285bd --- /dev/null +++ b/docs/src/components/HomepageFeatures/index.js @@ -0,0 +1,109 @@ +/* + * + * 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. + * + */ + +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; + +const FeatureList = [ + { + title: '沉浸式', + Svg: require('@site/static/img/immersive.svg').default, + description: ( + <> + 自动提示与补全、语法高亮、语句美化、语法校验、调试预览结果、元数据查询、全局变量、 + 字段级血缘分析等功能 + + ), + }, + { + title: '易用性', + Svg: require('@site/static/img/ease_of_use.svg').default, + description: ( + <> + Apache Flink 多种执行模无感知切换,支持 Flink 多版本,自动化托管实时任务及恢复点,自定义各种配置 + + ), + }, + { + title: '增强式', + Svg: require('@site/static/img/easy_of_deploy.svg').default, + description: ( + <> + 增强 FlinkSQL 语法及机制,如表值聚合函数、全局变量、CDC多源合并和整库同步、执行环境、语句合并、共享会话等 + + ), + }, + { + title: '一站式', + Svg: require('@site/static/img/one_stop.svg').default, + description: ( + <> + 提供从 FlinkSQL 开发调试到作业上线下线的运维监控及 OLAP 的即席查询,使数仓建设及数据治理一体化。 + + ), + }, + { + title: '易扩展', + Svg: require('@site/static/img/easy_of_extend.svg').default, + description: ( + <> + SPI 插件化机制及各种设计模式支持用户快速扩展新功能,如数据源、报警方式、自定义语法等 + + ), + }, + { + title: '无侵入', + Svg: require('@site/static/img/no_invasion.svg').default, + description: ( + <> + Spring Boot 轻应用快速部署,不需要在任何 Flink 集群修改源码或添加插件,无感知连接和监控 Flink 集群 + + ), + }, +]; + +function Feature({Svg, title, description}) { + return ( +
+
+ +
+
+

{title}

+

{description}

+
+
+ ); +} + +export default function HomepageFeatures() { + return ( +
+
+

Dinky Core Features


+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/docs/src/components/HomepageFeatures/styles.module.css b/docs/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 0000000000..f434d847e5 --- /dev/null +++ b/docs/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,31 @@ +/* + * + * 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. + * + */ + +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; + background-image: linear-gradient(119.6deg, rgb(200, 228, 247) 11.2%, rgb(237, 246, 250) 100.2%); +} + +.featureSvg { + height: 100px; + width: 100px; +} diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 0000000000..d90eb5694d --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,167 @@ +/* + * + * 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. + * + */ + +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; +} + +.docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.1); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); +} + +[data-theme='dark'] .docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.3); +} + +.structure .image img{ + width:90%; + margin-left: 2rem; + margin-right:2rem; +} +.structure .text{ + width:50%; + font-family: PingFangSC-Medium; + text-align:left ; +} +.title { + margin-top: 50px; + color: #0e0e0e; + text-align:left; + font-size:1.9rem; + font-family:PingFangSC-Medium +} +.sub-title { + width:100%; + text-align:left; + font-family:PingFangSC-Light; + font-size:1.3rem; + color: #0a0a0a; + padding:0; + line-height:1.8rem +} +.description { + width:100%; + margin:0 auto; + font-size:1.4rem; + color: #030303; + opacity:.6; + padding:1.3rem 0 0 +} +.action-button { + margin-top:2rem; + display:inline-block; + font-size:1rem; + color:#5169ac; + border:1px solid #5169ac; + padding:.4rem 2.8rem; + transition:background-color .1s ease; + box-sizing:border-box; +} +.action-button:hover { + color:#fff; + background-color:#5169ac; + text-decoration:none; +} + + +.container .desc{ + width: 100%; + high: auto; + display:flex; + align-items: center; + justify-content: space-between; +} + +.container .hero__title{ + font-size:2.5rem; + font-family:PingFangSC-Medium; + color:#fff; + text-align:center; + margin-bottom:1rem; +} +.container .desc_left{ + width:50%; +} +.container .desc_left .hero__title{ + font-size:2.5rem; + font-family:PingFangSC-Medium; + color:#fff; + text-align:center; + margin-bottom:1rem; +} +.container .desc_left .hero__subtitle{ + text-align:center; + margin-bottom:1rem; +} + +.container .desc .desc_left .hero_desc{ + text-align:center; + margin-bottom:1rem; +} + +.container .desc .desc_right{ + display:flex; + position: relative; + width:100%; + height: 20%; +} +.container .desc .desc_right img .fly_svg{ + width:100%; + height:40%; +} +/*a:link {color: blue; text-decoration:none;} !* 未访问:蓝色、无下划线 *!*/ +/*a:active { color: red; } !* //激活:红色 *!*/ +/*a:visited {color:purple;text-decoration:none;} !* //已访问:紫色、无下划线 *!*/ +a:hover {color: #05b7b2; text-decoration:none;} /* //鼠标移近:有颜色、无下划线 */ +/*a:hover { text-decoration:none;} !* //鼠标移近:无下划线 *!*/ + +h2.blogPostTitle_node_modules-\@docusaurus-theme-classic-lib-next-theme-BlogPostItem-styles-module a { + font-size: 1.3rem; +} +h1.blogPostTitle_node_modules-\@docusaurus-theme-classic-lib-next-theme-BlogPostItem-styles-module{ + font-size: 1.8rem; +} \ No newline at end of file diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js new file mode 100644 index 0000000000..693b02a261 --- /dev/null +++ b/docs/src/pages/index.js @@ -0,0 +1,135 @@ +/* + * + * 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. + * + */ + +import React from 'react'; +import clsx from 'clsx'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import styles from './index.module.css'; +import HomepageFeatures from '@site/src/components/HomepageFeatures'; + + +function HomepageHeader() { + const {siteConfig} = useDocusaurusContext(); + return ( +
+
+
+
+

{siteConfig.title}

+

{siteConfig.tagline}

+

     + 一站式 FlinkSQL & SQL DataOps
+ 基于 Apache Flink 二次开发,无侵入,开箱即用
     + 实时即未来,批流为一体

+

+
+ + GitHub + +    + + Gitee + +    + + Quick Start + +    + +