跳到主要内容
版本: 1.1

常规部署


数据库初始化

Dinky 采用 mysql 作为后端的存储库,mysql 支持 5.7+。这里假设你已经安装了 mysql 。首先需要创建 Dinky 的后端数据库,这里以配置文件中默认库创建。

在 Dinky 根目录 sql 文件夹下分别放置了 dinky-mysql.sql 、 upgrade/${version}_schema/mysql/ddl 和 dml。如果第一次部署,可以直接将 sql/dinky-mysql.sql 文件在 dinky 数据库下执行。(如果之前已经部署,那 upgrade 目录下存放了各版本的升级 sql ,根据版本号按需执行即可)

#登录mysql
mysql -uroot -p
#创建数据库
mysql>
create database dinky;
#授权
mysql>
grant all privileges on dinky.* to 'dinky'@'%' identified by 'dinky' with grant option;
mysql>
flush privileges;
#此处用 dinky 用户登录
mysql -h fdw1 -udinky -pdinky

第一次部署

#首先登录 mysql
mysql -h fdw1 -udinky -pdinky
mysql> use dinky;
mysql> source /opt/dinky/sql/dinky-mysql.sql

Dinky 部署

注意事项

自 Dinky v1.0.0 版本开始,Dinky 采用了新的打包部署方式, 提供了适配每个 Flink 版本的二进制包(tar.gz) ,需要根据 Flink 版本选择对应的 Dinky 版本,不再支持多个版本共存在单一二进制包内,请根据实际情况选择对应版本

解压到指定目录

tar -zxf dinky-release-${flink.version}-${dinky.version}.tar.gz
mv dinky-release-${flink.version}-${dinky.version} dinky
cd dinky

配置文件

创建好数据库后,修改 Dinky 配置文件,选择默认数据源为 mysql。

cd /opt/dinky/config/
vim application.yml
# 修改 Dinky 所使用的数据库类型为 mysql
spring:
application:
name: Dinky
profiles:
# The h2 database is used by default. If you need to use other databases, please set the configuration active to: mysql, currently supports [mysql, pgsql, h2]
# If you use mysql database, please configure mysql database connection information in application-mysql.yml
# If you use pgsql database, please configure pgsql database connection information in application-pgsql.yml
# If you use the h2 database, please configure the h2 database connection information in application-h2.yml,
# note: the h2 database is only for experience use, and the related data that has been created cannot be migrated, please use it with caution
active: ${DB_ACTIVE:mysql} #[h2,mysql,pgsql]

修改 Dinky 的 mysql 的配置文件。

vim application-mysql.yml
# 修改 Dinky 的 mysql 链接配置
spring:
datasource:
url: jdbc:mysql://${MYSQL_ADDR:127.0.0.1:3306}/${MYSQL_DATABASE:dinky}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${MYSQL_USERNAME:dinky}
password: ${MYSQL_PASSWORD:dinky}
driver-class-name: com.mysql.cj.jdbc.Driver

上传依赖

Dinky 需要具备内置的 Flink 环境,该 Flink 环境的实现需要用户自己在 Dinky 根目录下 extends/flink${FLINK_VERSION} 文件夹上传相关的 Flink 依赖,如 flink-dist, flink-table 等,具体见下文。当然也可在启动文件中指定 FLINK_HOME,但不建议这样做。

注意事项
  1. Dinky 并没有内置的 mysql/postgres 数据库驱动,需要用户自己上传 mysql-connector-java-xxx.jar/postgresql-xxx.jar 等jdbc 驱动到 lib 下或者extends 下
  2. Dinky 当前版本的 yarn 的 per-job 与 application 执行模式依赖 flink-shaded-hadoop ,需要额外添加 flink-shaded-hadoop-uber 包,如果您使用的是flink-shaded-hadoop-uber-3请手动删除该包内部的 javax.servlet 等冲突内容。 当然如果你的 Hadoop 为 3+ 也可以自行编译对于版本的 dinky-client-hadoop.jar 以替代 uber 包,
  3. Dinky所有监控相关功能目前强依赖hadoop,即使你不需要任何hadoop功能,也需要上传flink-shaded-hadoop-uber,否则会导致监控功能无法正常使用

将 flink-shaded-hadoop 上传到到 extends 文件目录下,使用 flink-shaded-hadoop-3 地址如下:

https://mvnrepository.com/artifact/org.apache.flink/flink-shaded-hadoop-3-uber?repo=cloudera-repos

如果是 CDH 及 HDP 使用开源 flink-shaded 对 Dinky 目前没有影响,其他用到的依赖取决于 CDH 或者 HDP 与开源版本的兼容性,需要自行根据兼容性添加依赖即可正常使用 Dinky 的所有功能。

最终项目根目录如下,仅供参考:

├── auto.sh -- 启动停止脚本
├── config -- 配置文件
│ ├── jmx
│ │ └── jmx_exporter_config.yaml -- JMX 监控集成
│ ├── application.yml -- 主要程序运行配置文件
│ ├── application-h2.yml -- h2 配置文件
│ ├── application-jmx.yml -- jmx 配置文件
│ ├── application-mysql.yml -- mysql 配置文件
│ ├── application-pgsql.yml -- pgsql 配置文件
│ ├── DinkyFlinkDockerfile -- k8s 集群配置自动构建镜像的Dockerfile
│ └── log4j2.xml -- 日志配置
├── dinky-loader
│ ├── ExpressionVariableClass -- 全局变量动态加载的表达式扫描配置文件
│ └── FlinkConfClass -- 全局变量动态加载 Flink 配置的扫描配置文件
├── extends
│ ├── flink1.14 -- 适配 Flink1.14.x
│ │ └── dinky
│ │ ├── dinky-catalog-mysql-1.14-${VERSION}.jar -- dinky 的 catalog 实现
│ │ ├── dinky-client-1.14-${VERSION}.jar
│ │ └── dinky-connector-jdbc-1.14-${VERSION}.jar -- dinky 的 jdbc 连接器增强实现
│ ├── flink1.15 -- 适配 Flink1.15.x
│ │ └── dinky
│ │ ├── dinky-catalog-mysql-1.15-${VERSION}.jar -- dinky 的 catalog 实现
│ │ └── dinky-client-1.15-${VERSION}.jar
│ ├── flink1.16 -- 适配 Flink1.16.x
│ │ └── dinky
│ │ ├── dinky-catalog-mysql-1.16-${VERSION}.jar -- dinky 的 catalog 实现
│ │ └── dinky-client-1.16-${VERSION}.jar
│ ├── flink1.17 -- 适配 Flink1.17.x
│ │ └── dinky
│ │ ├── dinky-catalog-mysql-1.17-${VERSION}.jar -- dinky 的 catalog 实现
│ │ └── dinky-client-1.17-${VERSION}.jar
│ └── flink1.18 -- 适配 Flink1.18.x
│ │ └── dinky
│ │ ├── dinky-catalog-mysql-1.18-${VERSION}.jar -- dinky 的 catalog 实现
│ │ └── dinky-client-1.18-${VERSION}.jar
├── jar
│ ├── dinky-app-1.14-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.14.x application
│ ├── dinky-app-1.15-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.15.x application
│ ├── dinky-app-1.16-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.16.x application
│ ├── dinky-app-1.17-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.17.x application
│ └── dinky-app-1.18-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.18.x application
├── lib
│ └── ... -- Dinky 的内部依赖
└── sql
├── dinky-mysql.sql -- Mysql 首次初始化脚本
├── dinky-pg.sql -- PGSql 首次初始化脚本
└── upgrade -- 各个版本的升级 SQL

对应 Flink 版本的依赖,放在Dinky 安装目录下 extends/flink${FLINK_VERSION} 下,例如:

flink-cep-1.16.1.jar
flink-connector-files-1.16.1.jar
flink-connector-jdbc-1.16.1.jar
flink-csv-1.16.1.jar
flink-dist-1.16.1.jar
flink-json-1.16.1.jar
flink-scala_2.12-1.16.1.jar
flink-shaded-hadoop-2-uber-2.7.5-8.0.jar
flink-shaded-zookeeper-3.5.9.jar
flink-table-api-java-uber-1.16.1.jar
# !!!特别注意,flink自带lib里的planner是带loader的,比如:flink-table-planner-loader-1.16.1.jar,
# 需要删除带loader的jar包,换一个不带loader的jar, 可前往flink根下的opt目录中找到
# 对于standalone,hdfs,k8s等集群上的flink集群同样要做此操作
flink-table-planner_2.12-1.16.1.jar

flink-table-runtime-1.16.1.jar
log4j-1.2-api-2.17.1.jar
log4j-api-2.17.1.jar
log4j-core-2.17.1.jar
log4j-slf4j-impl-2.17.1.jar
提示

1.0.0 之前的版本 Flink 相关依赖是放在 plugins 目录下,1.0.0 及之后是放在 extends 目录下。

推荐公共 jar 包放在 extends 目录下,Flink 版本的依赖放在 extends/flink${FLINK_VERSION} 下

启动 Dinky

#启动
sh auto.sh start
#停止
sh auto.sh stop
#重启
sh auto.sh restart
#查看状态
sh auto.sh status

# 前台启动(调试使用,会输出日志,阻塞当前终端,结束请Ctrl+C,但是会直接退出服务,仅供启动时无日志输出且在排查问题时使用)
sh auto.sh startOnPending

版本适配

启动指令的第二个参数则是版本选择,支持 【1.14, 1.15, 1.16, 1.17, 1.18, 1.19】,参考指令如下:

自 1.0.2 版本开始加入了自动检测 Flink 版本的功能,如果不传入版本号,则会自动检测 Flink 版本作为启动版本(即检测 extends 目录下的 flink${FLINK_VERSION} 文件夹)

#启动
sh auto.sh start 1.16
说明

服务启动后,默认端口 8888,http://127.0.0.1:8888 , 默认用户名/密码: admin/dinky123!@# ,如需修改,请使用默认用户名/密码登录后,在认证中心->用户中修改

Dinky 部署需要 MySQL5.7 以上版本

Nginx 配置

Dinky使用了SSE技术作为日志推流,如果您使用了nginx代理,需要配置Nginx支持SSE,否则默认Nginx配置会导致大量连接异常,造成页面极其卡顿, 需要在Nginx配置文件中添加以下配置:

proxy_buffering off;
proxy_cache off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;