常规部署
数据库初始化
Dinky 采用 mysql 作为后端的存储库,mysql 支持 5.7+。这里假设你已经安装了 mysql 。首先需要创建 Dinky 的后端数据库,这里以配置文件中默认库创建。
- mysql-5.x
- mysql-8.x
#登录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 {mysql地址} -udinky -pdinky
#登录mysql
mysql -uroot -p
#创建数据库
mysql>
CREATE DATABASE dinky;
#创建用户并允许远程登录
mysql>
create user 'dinky'@'%' IDENTIFIED WITH mysql_native_password by 'dinky';
#授权
mysql>
grant ALL PRIVILEGES ON dinky.* to 'dinky'@'%';
mysql>
flush privileges;
第一次部署
Dinky使用Flyway进行数据库版本管理,在第一次部署时,无需手动建表, Flyway 会自动完成。用户只需配置好数据库连接信息,其他配置文件默认即可。
Dinky 部署
自 Dinky v1.0.0 版本开始,Dinky 采用了新的打包部署方式, 提供了适配每个 Flink 版本的二进制包(tar.gz) ,需要根据 Flink 版本选择对应的 Dinky 版本,不再支持多个版本共存在单一二进制包内,请根据实际情况选择对应版本
- Linux
解压到指定目录
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,但不建议这样做。
- Dinky 并没有内置的 mysql/postgres 数据库驱动,需要用户自己上传 mysql-connector-java-xxx.jar/postgresql-xxx.jar 等jdbc 驱动到
lib 下
或者extends 下
- 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 包,
将 flink-shaded-hadoop 上传到到 extends 文件目录下,使用 flink-shaded-hadoop-3 地址如下:
# 非hadoop环境不需要这步操作
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依赖
对应 Flink
版本的依赖,放在Dinky 安装目录下 extends/flink${FLINK_VERSION} 下,
Flink自带lib里的planner是带loader的,比如:flink-table-planner-loader-1.16.1.jar, 需要删除带loader的jar包,换一个不带loader的jar, 可前往flink根下的opt目录中找到, 对于standalone,hdfs,k8s等集群上的flink集群同样要做此操作
例如:
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-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 ./bin/auto.sh start 1.20
#停止
sh ./bin/auto.sh stop
#重启
sh ./bin/auto.sh restart
#查看状态
sh ./bin/auto.sh status
# 前台启动(调试使用,会输出日志,阻塞当前终端,结束请Ctrl+C,但是会直接退出服务,仅供启动时无日志输出且在排查问题时使用)
sh auto.sh startOnPending 1.20
版本适配
启动指令的第二个参数则是版本选择,支持 【1.14, 1.15, 1.16, 1.17, 1.18, 1.19】,参考指令如下:
自 1.0.2 版本开始加入了自动检测 Flink 版本的功能,如果不传入版本号,则会自动检测 Flink 版本作为启动版本(即检测 extends 目录下的 flink${FLINK_VERSION} 文件夹)
#启动
sh ./bin/auto.sh start 1.16
服务启动后,默认端口 8888,http://127.0.0.1:8888 , 默认用户名/密码: admin/dinky123!@# ,如需修改,请使用默认用户名/密码登录后,在认证中心
->用户
中修改
Dinky 部署需要 MySQL5.7 以上版本
Nginx 配置
Dinky 1.0-1.1版本
Dinky使用了SSE技术作为日志推流,如果您使用了nginx代理,需要配置Nginx支持SSE,否则默认Nginx配置会导致大量连接异常,造成页面极其卡顿, 需要在Nginx配置文件中添加以下配置:
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
Dinky 1.2以后版本
Dinky使用了Websocket技术作为日志推流,如果您使用了nginx代理,需要配置Nginx支持Websocket,否则无法使用控制台等功能 需要在Nginx配置文件中添加以下配置:
注意,以下为参考配置,并非强制要求标准配置,请根据你的自身情况进行修改
location /api/ws/global {
proxy_pass ${你的后端地址};
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
location /ws/sql-gateway/ {
proxy_pass ${你的后端地址};
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
在Http节点加入配置支持websocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}