一、前期准备
项目路径:https://github.com/DTStack/flinkStreamSQL
官方文档:https://github.com/DTStack/flinkStreamSQL/blob/1.11_release/docs/quickStart.md
官方视频:b站(欢迎各位多多三连)
https://www.bilibili.com/video/BV1GA411J7RL?from=search&seid=9301258683583870508 《FlinkStreamSQL初步介绍》
https://www.bilibili.com/video/BV14f4y1D7yR?from=search&seid=9301258683583870508 《FlinkStreamSQL的使用和贡献》
Git Clone 项目
首先,需要将项目从Github上导入到IDEA中(导入方法较多,这里介绍一种常用的)
从IDEA菜单栏里,Git 选项 -> Clone -> FlinkStreamSQL 项目地址,点击Clone即可获取FlinkStreamSQL 源码一份!
项目下载好后,默认分支是 1.11_release,对应的Flink版本是Flink 1.11.x(FlinkStreamSQL 的 release版本对应着 Flink 的 release 版本),需要其他版本的自行切换,推荐使用 1.10_release。
项目编译
项目下载下来后,第一次编译之前,先将整个项目maven reimport 一次
如果有缺少JAR包,在某度或某歌上搜索即可(项目本身并不依赖什么独有的JAR包,毕竟是开源项目),或者在官方钉钉群的文件中搜索看看,会有意外发现。
上面操作没有问题后,就可以开始编译了。
编译命令:
mvn clean package -DskipTests
打包结束后会生成对应的插件包文件夹,1.8 版本对应的是plugins,1.10 及 之后的版本对应的sqlplugins
如果有用不到的插件,可以在项目的root路径下的pom中,注释掉不需要使用的插件
【!!!注意!!!】【!!!注意!!!】【!!!注意!!!】
部分插件之间有依赖关系,所以在注释的时候,请小心别把相关依赖的插件注释掉
rdb模块被所有关系型数据库所依赖,包括impala 模块(虽然它不是关系型数据库,但是它使用了JDBC)
core模块是所有模块所依赖的,不能注释!!
Launcher模块是任务提交必备,不能注释!!
Kafka-base模块是kafka插件的基础,如果使用了kafka插件(不管什么版本),不能注释!!
1.10 及之后的版本,新增了dirtyData模块,是用来提供脏数据指定存储功能(比如将脏数据存储到指定mysql数据库中),不能注释!!
【!!!注意!!!】【!!!注意!!!】【!!!注意!!!】
任务提交
项目编译完之后,就可以提交任务了。任务提交的方式有local、standalone、yarn-session、yarn-per-job模式,后续会支持application(需要等到1.12版本)
从idea提交任务
如果以下概念中,有不懂的,自行查资料了解(学会查资料,比问别人更有效率)
使用的idea版本是2020.3 公开版,有不一样的地方自行修改
这里以yarn-per-job模式为例,其他模式类似,可以看文档自行配置任务提交参数
1.配置idea-application
有个快捷的方法,找到LauncherMain,然后运行,在idea自动生成的application中修改,或者直接"Modify Run Configuration"
这里贴下自己一直使用的任务提交参数,需要的自行修改,每个参数具体什么意思,在官方参数文档中也有详细说明。
-name
Test
-mode
yarnPer
-sql
/dtstack/sql/test/JoinDemoFour.sql
-localSqlPluginPath
/IdeaProjects/StreamSQLOne/sqlplugins
-flinkconf
/dtstack/conf/flink
-yarnconf
/dtstack/conf/yarn
-flinkJarPath
/dtstack/flink-1.10.1/lib
-confProp
{\"metrics.latency.interval\":\"30000\",\"metrics.latency.granularity\":\"operator\",\"time.characteristic\":\"ProcessingTime\",\"disableChain\":\"true\"}
-pluginLoadMode
shipfile
-queue
b
任务SQL怎么写?这个根据自己的插件,去看对应的插件文档,最基本的任务SQL框架是:
CREATE Source(源表) -> CREATE Side(维表,根据自己业务来确定是否需要) -> CREATE Sink(结果表) -> INSERT INTO Sink blablabla...(实际执行的业务SQL,这个必须要,不然任务执行个