一、Dinky介绍

1.1、概述

Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践。 致力于简化Flink任务开发,提升Flink任务运维能力,降低Flink入门成本,提供一站式的Flink任务开发、运维、监控、报警、调度、数据管理等功能。

1.2、特性
  • 沉浸式 FlinkSQL 数据开发:自动提示补全、语法高亮、语句美化、在线调试、语法校验、执行计划、Catalog支持、血缘分析等
  • Flink SQL语法增强,如 CDC任务,jar任务,实时打印表数据,实时数据预览,全局变量增强,语句合并、整库同步等
  • 适配 FlinkSQL 多种执行模式:Local、Standalone、Yarn/Kubernetes Session、Yarn Per-Job、Yarn/Kubernetes Application
  • 增强 Flink 生态拓展:Connector、FlinkCDC、Table Store 等
  • 支持 FlinkCDC 整库实时入仓入湖、多库输出、自动建表、模式演变
  • 支持 Flink Java / Scala / Python UDF 开发与自动提交
  • 支持 SQL 作业开发:ClickHouse、Doris、Hive、Mysql、Oracle、Phoenix、PostgreSql、Presto、SqlServer、StarRocks 等
  • 支持实时在线调试预览 Table、 ChangeLog、统计图和 UDF
  • 支持 Flink Catalog、Dinky内置Catalog增强,数据源元数据在线查询及管理
  • 支持自动托管的 SavePoint/CheckPoint 恢复及触发机制:最近一次、最早一次、指定一次等
  • 支持实时任务运维:作业信息、集群信息、作业快照、异常信息、历史版本、报警记录等
  • 支持作为多版本 FlinkSQL Server 以及 OpenApi 的能力
  • 支持实时作业报警及报警组:钉钉、微信企业号、飞书、邮箱等
  • 支持多种资源管理:集群实例、集群配置、数据源、报警组、报警实例、文档、系统配置等
  • 支持企业级管理功能:多租户、用户、角色、命名空间等
  • 更多隐藏功能等待小伙伴们探索

官网:https://www.dinky.org.cn/

GitHub:https://github.com/DataLinkDC/dinky

文档:https://www.dinky.org.cn/docs/next/get_started/quick_experience/

1.3、主要功能

1.4、原理

二、安装部署

Dinky不依赖任何外部环境,完全解耦,支持同时连接多个不同的集群实例进行运维。

2.1、准备安装包

下载Dinky解压包(也可以通过官网下载 Dinky ,然后上传到服务器)

wget https://github.com/DataLinkDC/dinky/releases/download/v1.2.3/dinky-release-1.17-1.2.3.tar.gz

下载java jdk1.8+上传到服务器并且配置好java环境变量

2.2、初始化 MySQL 数据库

登录mysql

mysql -u root -p

创建数据库dinky

CREATE DATABASE dinky;

创建用户,并给予权限,并刷新权限

CREATE USER 'dinky'@'%' IDENTIFIED WITH mysql_native_password BY 'dinky';

GRANT ALL PRIVILEGES ON dinky.* TO 'dinky'@'%';

FLUSH PRIVILEGES;

注意:

Dinky使用Flyway进行数据库版本管理,在第一次部署时,无需手动建表, Flyway 会自动完成。用户只需配置好数据库连接信息,其他配置文件默认即可。

2.3、Dinky 部署

解压安装包到指定目录下

tar -zxvf dinky-release-1.17-1.2.3.tar.gz -C /opt/

将解压后的dinky文件改名

cd /opt

mv dinky-release-1.17-1.2.3 dinky

修改 Dinky 配置文件,选择默认数据源为 mysql

cd /opt/dinky/config/
vi 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 的配置文件

vi 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 等。
  • Dinky 采用 【h2,mysql,postgresql 】作为后端的存储库,mysql 支持 5.7+。选择mysql作为存储库时,需要把mysql驱动包上传到 Dinky 根目录下 lib 文件夹里。

注意事项:

  1. 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 包,
  2. Dinky所有监控相关功能目前强依赖hadoop,即使你不需要任何hadoop功能,也需要上传flink-shaded-hadoop-uber,否则会导致监控功能无法正常使用
  3. 将 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依赖

下载对应的 Flink 版本,把Flink解压后,把Flink的lib目录下的依赖包拷贝放在 Dinky 安装目录 extends/flink${FLINK_VERSION} 下

例如:

flink-cep-1.17.1.jar
flink-connector-files-1.17.1.jar
flink-connector-jdbc-1.17.1.jar
flink-csv-1.17.1.jar
flink-dist-1.17.1.jar
flink-json-1.17.1.jar
flink-scala_2.12-1.17.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.17.1.jar

flink-table-planner_2.12-1.17.1.jar

flink-table-runtime-1.17.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

特别注意:

# flink自带lib里的planner是带loader的,比如:flink-table-planner-loader-1.17.1.jar,
# 需要删除带loader的jar包,换一个不带loader的jar, 可前往flink根下的opt目录中找到
# 对于standalone,hdfs,k8s等集群上的flink集群同样要做此操作

Flink官方历史版本:https://archive.apache.org/dist/flink/

2.4、Dinky 启动

Dinky一些相关命令

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

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

版本适配

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

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

启动dlinky

#启动
sh ./bin/auto.sh start 1.17

注意:

如启动报错,查看启动日志,根据错误信息排查问题,如下命令:

cat dinky/logs/dinky-start.log

检查进程

ps aux | grep dinky-admin

检查端口监听

netstat -tuln | grep 8888

本地访问测试

curl http://localhost:8888

以上没有检测到进程和端口就需要重新启动dinky

sh ./bin/auto.sh stop

sh ./bin/auto.sh start 1.17

登录dinky网页

服务启动后,默认端口 8888,访问:http://IP:8888

账号:admin

密码:初次登录需自己设置密码

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐