【总结】Dinky学习笔记

概述

Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践

官网:Dinky

核心特性

  1. 沉浸式:提供专业的 DataStudio 功能,支持全屏开发、自动提示与补全、语法高亮、语句美化、语法校验、 调试预览结果、全局变量、MetaStore、字段级血缘分析、元数据查询、FlinkSQL 生成等功能
  2. 易用性:Flink 多种执行模式无感知切换,支持 Flink 多版本切换,自动化托管实时任务、恢复点、报警等, 自定义各种配置,持久化管理的 Flink Catalog
  3. 增强式:兼容且增强官方 FlinkSQL 语法,如 SQL 表值聚合函数、全局变量、CDC 整库同步、执行环境、 语句合并、共享会话等
  4. 一站式:提供从 FlinkSQL 开发调试到上线下线的运维监控及 SQL 的查询执行能力,使数仓建设及数据治理一体化
  5. 易扩展:源码采用 SPI 插件化及各种设计模式支持用户快速扩展新功能,如连接器、数据源、报警方式、 Flink Catalog、CDC 整库同步、自定义 FlinkSQL 语法等
  6. 无侵入:Spring Boot 轻应用快速部署,不需要在任何 Flink 集群修改源码或添加额外插件,无感知连接和监控Flink 集群

主要功能

  1. 沉浸式 FlinkSQL 数据开发:自动提示补全、语法高亮、语句美化、在线调试、语法校验、执行计划、MetaStore、血缘分析、版本对比等
  2. 支持 FlinkSQL 多版本开发及多种执行模式:Local、Standalone、Yarn/Kubernetes Session、Yarn Per-Job、Yarn/Kubernetes Application
  3. 支持 Apache Flink 生态:Connector、FlinkCDC、Table Store 等
  4. 支持 FlinkSQL 语法增强:表值聚合函数、全局变量、执行环境、语句合并、整库同步等
  5. 支持 FlinkCDC 整库实时入仓入湖、多库输出、自动建表、模式演变
  6. 支持 Flink Java / Scala / Python UDF 开发与自动提交
  7. 支持 SQL 作业开发:ClickHouse、Doris、Hive、Mysql、Oracle、Phoenix、PostgreSql、Presto、SqlServer、StarRocks 等
  8. 支持实时在线调试预览 Table、 ChangeLog、统计图和 UDF
  9. 支持 Flink Catalog、数据源元数据在线查询及管理
  10. 支持自动托管的 SavePoint/CheckPoint 恢复及触发机制:最近一次、最早一次、指定一次等
  11. 支持实时任务运维:上线下线、作业信息、集群信息、作业快照、异常信息、数据地图、数据探查、历史版本、报警记录等
  12. 支持作为多版本 FlinkSQL Server 以及 OpenApi 的能力
  13. 支持实时作业报警及报警组:钉钉、微信企业号、飞书、邮箱等
  14. 支持多种资源管理:集群实例、集群配置、Jar、数据源、报警组、报警实例、文档、系统配置等
  15. 支持企业级管理功能:多租户、用户、角色、命名空间等

安装部署

dinky版本:dlink-release-0.7.3.tar.gz

flink版本:支持的flink版本有flink1.11.0—flink1.17.0

前置条件:已安装flink(当前版本1.13.0)/已安装hadoop(当前版本3.1.3,因为可能使用到yarn模式)


安装步骤:

1.上传安装包并解压到指定目录:tar -zxvf dlink-release-0.7.3.tar.gz -C /opt/module/

2.重命名:mv dlink-release-0.7.3 dinky

3.初始化MySQL数据库(Dinky 采用 mysql 作为后端的存储库,部署需要 MySQL5.7 以上版本):

        3.1连接到MySQL

        3.2创建数据库:CREATE DATABASE dinky;

        3.3创建用户dinky并允许远程登录:create user 'dinky'@'%' IDENTIFIED WITH mysql_native_password by 'dinky';'dinky'@'%'含义是允许远程登录;IDENTIFIED WITH mysql_native_password by 'dinky'含义是设置密码为'dinky'

        3.4授权给用户dinky:grant ALL PRIVILEGES ON dinky.* to 'dinky'@'%';

        3.5刷新MySQL的系统权限相关表,使设置生效:flush privileges;

        3.6登录创建好的dinky用户,切换到dinky数据库并执行初始化sql文件:source /opt/module/dinky/sql/dinky.sql        

dinky.sql用于初始化;

upgrade目录下存放了各版本的升级sql:

 4.修改配置文件:cd /opt/module/dinky/config,修改application.yml文件,将数据库地址改为:hadoop102:3306,数据库名称、用户名称、密码以及application名称改为dinky:

5.加载依赖:

        5.1  加载Flink依赖:Dinky 需要具备自身的 Flink 环境,该 Flink 环境的实现需要用户自己在 Dinky 根目录下:plugins/flink${FLINK_VERSION} 文件夹并上传相关的 Flink 依赖,例如:cp /opt/module/flink-1.13.0/lib/* /opt/module/dinky/plugins/flink1.13

        5.2  加载Hadoop依赖:Dinky 当前版本的 yarn 的 perjob 与 application 执行模式依赖 flink-shade-hadoop ,需要额外添加 flink-shade-hadoop-uber-3 包,因此将flink-shaded-hadoop-3-uber-3.1.1.7.2.9.0-173-9.0.jar上传到/opt/module/dinky/plugins目录下

6.上传jar包:使用 Application 模式时,需要将flink和dinky相关的包上传到HDFS

        6.1  创建HDFS目录并上传dinky的jar包

hadoop fs -mkdir -p /dinky/jar/

hadoop fs -put /opt/module/dinky/jar/dlink-app-1.13-0.7.3-jar-with-dependencies.jar /dinky/jar

        6.2  创建HDFS目录并上传flink的jar包:

hadoop fs -mkdir /flink-dist

hadoop fs -put /opt/module/flink-1.17.0/lib /flink-dist

hadoop fs -put /opt/module/flink-1.17.0/plugins /flink-dist

7.启停命令:进入dinky根目录:cd /opt/module/dinky

        7.1  启动:sh auto.sh start 1.13(需要指定版本号),默认端口为8888,web ui地址为:http://hadoop102:8888,默认用户名/密码为:admin/admin

        7.2  停止:sh auto.sh stop(不需要指定版本号)

        7.3  重启:sh auto.sh restart 1.17

8.Flink设置:使用 Application 模式以及 RestAPI 时,需要修改相关Flink配置,将“提交FlinkSQL的Jar文件路径”修改为dlink-app包的路径:

集群注册

提交 FlinkSQL 作业时,首先要保证安装了 Flink 集群。Flink 当前支持的集群模式包括:

  1. Standalone 集群
  2. Yarn 集群
  3. Kubernetes 集群

以上集群的管理可以在Dinky Web UI的注册中心中进行设置:

目前dinky支持的集群类型有:

Flink 实例管理

Flink 实例管理适用于 Standalone,Yarn Session 和 Kubernetes Session这三种集群实例的注册,其他类型的集群只能查看作业信息;

先启动集群,再进行作业提交

1.注册Standalone集群

首先手动启动Standalone集群:

进入Flink根目录下,执行启动命令:bin/start-cluster.sh

集群启动之后在dinky页面点击”新建“,创建新的集群实例:

问题:即使在flink的配置文件masters中配置了备用的JobManager列表为:

hadoop102:8081,hadoop103:8081

这里的JobManager 高可用地址也只能填写hadoop102:8081或者hadoop103:8081,而不能同时填写两个JobManager

创建完成后可以看到注册的集群状态正常:

点击FlinkWebUI可以进入flink的web UI界面:

(此时没有作业在运行)

2.注册Yarn Session集群

首先需要手动启动Yarn Session集群:
进入Flink的根目录下,执行:bin/yarn-session.sh -nm test

启动完成后可以看到JobManager的地址:

在浏览器中打开hadoop103:8088,可以看到当前已启动的一个application:

接下来在dinky中创建Yarn Session类型的集群:

这里的JobManager高可用地址即使填写错误也会自动修正

创建完成后可以看到集群状态正常:

集群配置管理

集群配置管理适用于 Yarn Per-job、Yarn Application 和 Kubernetes Application 这三种类型配置

点击创建集群,首先填写主要配置:

  • 类型选择Flink On Yarn;
  • Hadoop配置文件路径一般为:${hadoop安装根目录}/etc/hadoop
  • ha.zookeeper.quorum即高可用配置,zookeeper的地址
  • lib路径为相应版本的Flink lib内容,但需要提前上传至hdfs上
  • Flink配置文件路径一般为:${flink安装根目录}/conf

然后可以配置一些参数:

其优先级高于flink-conf.yaml文件中配置的参数;

最后填写基本配置信息:

点击”测试“按钮,测试链接成功后即可创建:

列表中即可看到可用的集群配置:

作业提交运行

案例内容:在dinky中创建FlinkSQL作业,编写SQL语句并提交到不同的集群中去运行

创建作业

首先在”数据开发“面板创建目录:

然后右键单击目录选择创建作业:

作业类型有很多种,这里选择FlinkSQL:

这里"别名"是必选项,可以填写中文

作业创建完成后可用看到代码编写及控制台界面:

配置信息

官网链接:作业基础配置 | Dinky

作业配置

(1)执行模式:可选项如下

(2)Flink集群配置:当执行模式不选择Local时会出现该配置

比如说执行模式选择Standalone,在集群配置中可以看到之前创建的Flink实例信息:

(3)FlinkSQL环境:选择当前任务的 FlinkSQL 执行环境,会提前执行环境语句,默认无

(4)其他信息:

Insert语句集:【增强特性】 开启语句集机制,将把多个 Insert 语句合成一个 JobGraph 再进行提交,Select 语句无效

执行配置

(1)预览结果:开启预览结果,将同步运行并返回数据结果

(2)打印流:开启打印流,将同步运行并返回含有 op 信息的 ChangeLog,默认不开启且返回最终结果 Table

(3)最大行数:设置table展示的预览数据的最大行数

(4)自动停止:数据达到最大行数后自动停止

提交运行

Flink SQL语句如下:

--创建源表 source
CREATE TABLE source(id  BIGINT,name STRING
) WITH ('connector' = 'datagen'
);
--创建结果表 sink
CREATE  TABLE sink(id  BIGINT,name STRING
) WITH ('connector' = 'print'
);--将源表数据插入到结果表
INSERT INTO sink
SELECTid  ,name 
from source;

Local模式

点击"执行当前sql",在结果中可以看到数据:

Standalone模式

注意:切换执行模式之后必须先ctrl+s保存再点击"提交作业到集群",否则会将作业提交到上一次选择的集群中

然后到"运维中心"中可以看到正在运行中的任务:

点击进入该任务可以看到更多详细信息:

点击右上角FlinkWebUI可以进入Flink面板:

在Flink面板中点击找到TaskManager运行的机器,可以查看相应的日志信息:

点击Log,在stdout中可以看到相应的数据(前提是在【执行配置】中开启了【打印流】):


回到dinky的运维面板,在右上角可以选择对当前任务能够执行的操作:

但如果选择与SavePoint相关的操作必须提前配置,否则会报错;

(如果点击智能停止默认执行SavePoint停止)

如果没有配置SavePoint直接选择"普通停止"即可;

如下则作业已经成功停止:

Yarn Session模式

同样可以成功将作业提交到集群运行:

(其余内容和standalone模式完全一样)

Yarn Application模式

其余操作和standalone模式基本一致;


在使用该模式时出现了"异步提交失败"的情况,报错信息如下:

Caused by: java.io.IOException: Cannot find any jar files for plugin in directory [plugins/flink1.11]. Please provide the jar files for the plugin or delete the directory.

提示说在plugins/flink1.11这个文件夹中找不到相应的插件,回顾在"集群配置管理"中设置的集群配置,发现确实没有plugins相关的配置,推测该版本的dinky可能没有能够按照版本号来扫描对应的plugins文件夹从而选取合适的依赖,而是依次扫描plugins文件夹下所有目录:

从而导致虽然启动的版本是flink1.13,但使用的jar包是flink1.11的,因此按照提示删除flink1.11目录下所有内容,发现报错信息有所改变:

所以把除了flink1.13之外的目录全部删除即可


修改问题后作业可以正常提交:

(由于是提交作业时创建集群,因此作业提交速度会比较慢)

重要功能

1.持久化Catalog

dinky自己实现了 mysql-catalog,作用同 hive-catalog,可以持久化Flink元数据,在作业中无需再显式声明 DDL 语句

选择Catalog

在【作业配置】——【FlinkSQL环境】中选择:

默认提供了一个DefaultCatalog

需要注意这个DefaultCatalog和Flink内存中的Catalog并不一样;如果选择【FlinkSQL环境】为"无"才是使用Flink内存的Catalog;

查看Catalog

在左侧的【结构】目录中可以查看:

其中的my_catalog是dinky自己实现的mysql-catalog,而default_catalog是Flink内存中的Catalog

选择my_catalog下的默认数据库,可以看到已经创建的表:

右键单击对应的表可以查看表结构:

也可以通过show tables语句查看已有的表:

此时如果再次执行建表DDL,则会报错;

2.使用变量

定义变量

变量定义的语法为:key1 := value1;

例如:

var1:=source;--创建源表 source
CREATE TABLE ${var1}(id  BIGINT,name STRING
) WITH ('connector' = 'datagen'
);select * from ${var1};

使用自定义的变量时需要开启【全局变量】:

否则在进行SQL检查时会报错;

执行上述SQL,结果如下:

变量定义正常生效;

查看变量

查看变量语法如下:

-- 查看所有变量
SHOW FRAGMENTS;
-- 查看单个变量
SHOW FRAGMENT var2;

执行以下语句:

var1:=source;
SHOW FRAGMENTS;

可以查看到所有的变量名称(但看不到变量的值):

执行以下语句:

var1:=source;
SHOW FRAGMENTS var1;

才可以查看到变量var1的值:

全局使用变量

全局变量注册

上述方式定义的变量只适用于当前作业,所以如果想要在多个作业中使用同一个变量,需要将其注册为全局变量;

在【注册中心】—【全局变量管理】中进行注册:

注册成功后即可在作业中使用:

在FlinkSQLEnv中定义变量

dinky可以将FlinkSQL 封装为执行环境,供FlinkSQL任务使用,即为FlinkSQLEnv;也就是说在执行FlinkSQL任务之前先执行FlinkSQLEnv中的语句;

FlinkSQLEnv 场景适用于所有作业的SET、DDL语法统一管理的场景,当前FlinkSQLEnv 在SQL编辑器的语句限制在1000行以内

首先需要新建一个环境(和创建新作业流程相同,在类型中选择FlinkSQLEnv):

在环境中新建变量var3

然后在作业中选中环境,即可使用其中定义的变量:

连接配置变量

连接配置变量一般用于设置一些数据源的配置信息,例如MySQL的主机名、端口号、用户名以及密码等等;

使用步骤如下:

1.创建数据源

【注册中心】—【数据源管理】—【新建】—【选择数据源】

这里选择MySQL数据源,首先输入基本信息:

然后设置Flink连接配置:

(作为一个变量值来使用)

接下来设置Flink连接模板(即自动生成建表语句的模板):

'connector' = 'mysql-cdc'
,${mysql102}
,'scan.incremental.snapshot.enabled' = 'true'
,'debezium.snapshot.mode'='latest-offset'
,'database-name' = '${schemaName}'
,'table-name' = '${tableName}'
  • connector:Flink连接器,指定使用MySQL CDC连接器
  • ${mysql102}:占位符,表示需要提供的MySQL的连接信息(即上面设置的Flink连接配置变量值)
  • scan.incremental.snapshot.enabled = 'true':启用增量快照扫描功能,即只扫描自上次扫描以来发生变化的数据
  • debezium.snapshot.mode='latest-offset':设置快照模式为“最新偏移量”,即从最新的数据偏移量开始扫描
  • ${schemaName} :动态获取数据库
  • ${tableName}:动态获取表名称

信息填写完毕后进行测试链接,然后保存即可:

2.数据源访问

在【元数据中心】中点击对应的数据源即可查看相关信息:

在【描述】部分可以看到字段信息和表信息:

在【数据查询】部分可以看到表中的数据:

在【SQL生成】部分可以自动生成建表语句:

【FlinkDDL】即Flink语法的DDL语句,示例:

DROP TABLE IF EXISTS activity_info;
CREATE TABLE IF NOT EXISTS activity_info (`id` BIGINT NOT NULL COMMENT '活动id',`activity_name` STRING COMMENT '活动名称',`activity_type` STRING COMMENT '活动类型(1:满减,2:折扣)',`activity_desc` STRING COMMENT '活动描述',`start_time` TIMESTAMP COMMENT '开始时间',`end_time` TIMESTAMP COMMENT '结束时间',`create_time` TIMESTAMP COMMENT '创建时间',PRIMARY KEY ( `id` ) NOT ENFORCED
) COMMENT '活动表'WITH (
'connector' = 'mysql-cdc'
,${mysql102}
,'scan.incremental.snapshot.enabled' = 'true'
,'debezium.snapshot.mode'='latest-offset'
,'database-name' = 'gmall'
,'table-name' = 'activity_info'
);

可以看到我们创建数据源时填写的Flink连接模板被拼接到建表语句的WITH语法中;

【SELECT】即查询语法:

【SQLDDL】即MySQL语法的DDL语句:

3.建表语句使用

复制【FlinkSQL】中生成的建表语句到作业中,然后开启【全局变量】:

点击【检查当前SQL】,可以看到配置信息已经导入进来:

3.ADD JAR

ADD JAR 语句用于将用户 jar 添加到 classpath;可作用于standalone、session和 application 模式

当连接器和第三方依赖过多时,经常容易导致 jar依赖冲突,ADD JAR可以选择性的识别添加到服务器,做到环境隔离

使用语法:ADD JAR '<path_to_filename>.jar'(与sql-client一致,参考:https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/table/sql/jar/)

示例:通过ADD JAR的方式添加mysql-cdc的jar包:

首先将flink-sql-connector-mysql-cdc-2.3.0.jar上传至hadoop102的/opt/software/jars路径下,

然后即可在作业中通过ADD JAR语法来将jar包导入到当前作业环境中:

add jar '/opt/software/jars/flink-sql-connector-mysql-cdc-2.3.0.jar'

接下来即可执行连接器为mysql-cdc的Flink SQL,完整语句如下:

add jar '/opt/software/jars/flink-sql-connector-mysql-cdc-2.3.0.jar';--数据源中自动生成的建表语句
DROP TABLE IF EXISTS activity_info;
CREATE TABLE IF NOT EXISTS activity_info (`id` BIGINT NOT NULL COMMENT '活动id',`activity_name` STRING COMMENT '活动名称',`activity_type` STRING COMMENT '活动类型(1:满减,2:折扣)',`activity_desc` STRING COMMENT '活动描述',`start_time` TIMESTAMP COMMENT '开始时间',`end_time` TIMESTAMP COMMENT '结束时间',`create_time` TIMESTAMP COMMENT '创建时间',`operate_time` TIMESTAMP COMMENT '修改时间',PRIMARY KEY ( `id` ) NOT ENFORCED
) COMMENT '活动表'WITH ('connector' = 'mysql-cdc',${mysql102},'scan.incremental.snapshot.enabled' = 'true','debezium.snapshot.mode'='latest-offset','database-name' = 'gmall','table-name' = 'activity_info');CREATE  TABLE print
WITH ('connector' = 'print'
)
LIKE activity_info (EXCLUDING ALL);insert into print select * from activity_info;

这里的LIKE activity_info (EXCLUDING ALL);是Flink SQL的语法,意为创建一个与activity_info表结构一样的表,并且通过EXCLUDING语法来选择WITH中的配置项进行排除,EXCLUDING ALL即为排除所有配置选项;

执行结果如下(Web UI中的stdout):

中文乱码是由于yarn配置的原因

4.CDCSOURCE 整库同步

目前通过 FlinkCDC 进行整库同步会因为每张表都需要占用一个source,导致占用大量的数据库连接,对 Mysql 和网络造成压力

因此Dinky 定义了 CDCSOURCE 整库同步的语法,可以直接自动构建一个整库入仓入湖的实时任务,并且对 source 进行了合并,不会产生额外的 Mysql 及网络压力

具体采用的方法是只构建一个 source,然后根据 schema、database、table 进行分流处理,分别 sink 到对应的表

CDCSOURCE 语句用于将上游指定数据库的所有表的数据采用一个任务同步到下游系统;整库同步默认支持 Standalone、Yarn Session、Yarn Per job、K8s Session

使用语法

EXECUTE CDCSOURCE jobname WITH ( key1=val1, key2=val2, ...)

WITH 参数通常用于指定 CDCSOURCE 所需参数

常用参数如下:

配置项

是否必须

默认值

说明

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} 可注入经过处理的源表名

sink[N].*

N代表为多目的地写入, 默认从0开始到N, 其他配置参数信息参考sink.*的配置.

Flink CDC 和 Kafka 进行多源合并

环境配置

(1)启动kafka

(2)向Flink添加Dinky依赖:

将dinky根目录lib文件夹下的dlink-common-0.7.3.jardlink-client-base-0.7.3.jar以及plugins/filink1.13/dinky文件夹下的dlink-client-1.13-0.7.3.jar拷贝到flink的lib文件夹下:

cp /opt/module/dinky/lib/dlink-common-0.7.3.jar /opt/module/flink-1.13.0/lib/
cp /opt/module/dinky/lib/dlink-client-base-0.7.3.jar /opt/module/flink-1.13.0/lib/
cp /opt/module/dinky/plugins/flink1.13/dinky/dlink-client-1.13-0.7.3.jar /opt/module/flink-1.13.0/lib/

拷贝成功:

(3)添加连接器依赖(Dinky和Flink都需要添加):flink-sql-connector-mysql-cdc-2.3.0.jar以及flink-sql-connector-kafka-1.17.0.jar

cp /opt/software/jars/flink-sql-connector-mysql-cdc-2.3.0.jar /opt/module/flink-1.13.0/lib
cp /opt/software/jars/flink-sql-connector-mysql-cdc-2.3.0.jar /opt/module/dinky/pluginscp /opt/software/jars/flink-sql-connector-kafka-1.13.0.jar /opt/module/flink-1.13.0/lib
cp /opt/software/jars/flink-sql-connector-kafka-1.13.0.jar /opt/module/dinky/plugins/flink1.13

(4)重启Yarn-Session集群:

Session和Standalone这种需要事先启动集群的模式,依赖发生改变,需要重启集群才能生效

(5)重启dinky

实时数据合并至一个Kafka Topic

执行SQL:

EXECUTE CDCSOURCE cdc1 WITH ('connector' = 'mysql-cdc','hostname' = 'hadoop102','port' = '3306','username' = 'root','password' = 'hadoop','checkpoint' = '3000','scan.startup.mode' = 'initial','parallelism' = '1','table-name' = 'gmall\.activity_info,gmall\.activity_rule','sink.connector'='datastream-kafka','sink.topic'='dlinkcdc','sink.properties.transaction.timeout.ms'='60000','sink.brokers'='hadoop102:9092'
);

注意:sinkProducer的超时时间默认为1个小时,但是kafka broker的超时时间默认是15分钟,kafka broker不允许sinkProducer的超时时间比他大,同时sinkProducer的超时时间要比checkpoint间隔大,否则会报错;

这里kafka broker的超时时间默认为15min;checkpoint的间隔为3s,因此将sinkProducer的超时时间设置为60s是合理的

在作业中提交,可以看到只有一个source:

在kafka中查看list:kafka-topics.sh --bootstrap-server hadoop102:9092 --list

可以看到新建的topic——dlinkcdc

在kafka中消费该topic:bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic dlinkcdc(消费全部数据)

可以看到数据已经成功同步:

修改其中一条数据【联想专场】为【联想专场test】,可以看到数据已经同步更新:

实时数据合并至对应Kafka Topic

不指定sink.topic,就是写入对应的Topic:

EXECUTE CDCSOURCE cdc1 WITH ('connector' = 'mysql-cdc','hostname' = 'hadoop102','port' = '3306','username' = 'root','password' = 'hadoop','checkpoint' = '3000','scan.startup.mode' = 'initial','parallelism' = '1','table-name' = 'gmall\.activity_info,gmall\.activity_rule','sink.connector'='datastream-kafka','sink.properties.transaction.timeout.ms'='60000','sink.brokers'='hadoop102:9092'
);

然后提交到集群运行,在Web UI中可以看到一个source对应两个sink:

然后查看kafka中的topic,可以看到每一张表对应一个topic:

此时可以单独消费某一张表中的数据;


有关如何实现Flink CDC 和 Kafka 的多源合并以及下游同步更新可以参考:

Flink CDC 和 Kafka 多源合并 | Dinky

5.UDF开发

新建UDF

(1)配置模板:在【配置中心】—【UDF模板配置】中:

(2)可以通过新建作业的形式创建UDF:

填写相关信息后成功创建作业:

在作业中注册UDF

新建Flink SQL作业:

通过create temporary function HashFunction as 'com.why.udf.HashFunction';将自定义的UDF注册到当前作业中,然后就可以在SQL中使用:

create temporary function HashFunction as 'com.why.udf.HashFunction';CREATE TABLE sourceTable (id int
) WITH ('connector' = 'datagen'
);CREATE  TABLE sinkTable
WITH ('connector' = 'print'
)
LIKE sourceTable (EXCLUDING ALL);insert into sinkTable select HashFunction(id) from sourceTable;

在Web UI中可以成功看到stdout信息:

0.7.3版本的dinky的UDF功能对于Flink1.16.0以上版本还不支持,因为从Flink1.16开始引入了用户类加载器,需要使用用户类加载器。未来版本0.8.0已经支持Flink1.16以上版本(详见:https://github.com/DataLinkDC/dinky/pull/1581

6.用户管理

创建用户

在【认证中心】—【用户管理】中新建用户:

默认密码为123456

用户新建完成后需要绑定租户,否则登录会报错:

在【租户管理】中将用户分配到相应的租户中:

然后用户就可以登录了

登录成功后无法打开【认证中心】界面:

这是因为只有admin用户才能够进入【认证中心】界面,但该用户使用其他界面不受影响


当前版本(0.7.3)的dinky暂不支持【角色数据权限】和【命名空间管理】:

修改密码

如果忘记之前的密码,可以直接修改MySQL中的dlink_user表,密码是md5加密存储,直接用md5(新密码)的值,修改表里密码字段的值

7.报警管理

0.6版本以后,用户可以创建报警实例及报警组,监控 FlinkSQL 作业;

一个报警组可以使用多个报警实例,用户就可以进一步收到报警通知;收到的报警通知类型如下:

  • unknown
  • stop
  • cancel
  • finished

目前Dinky支持的报警插件有:

  • 钉钉告警 : WebHook
  • 企业微信告警 : 包含应用+群聊
  • 飞书告警 : WebHook
  • 邮箱告警 : 通过邮件发送报警通知

邮箱告警实例

首先需要准备两个邮箱,一个邮箱用来发送告警信息,另一个用来接收信息;

1.开启POP3/SMTP服务

用于发送告警信息的邮箱需要POP3/SMTP服务,我这里使用的是网易邮箱:

开启成功后会出现一个授权码,一定要保存下来,后面要用;

2.新建报警实例

在【注册中心】—【报警管理】中新建报警实例:

填写基本信息:

邮件服务器地址如下:

POP3服务器: pop.163.com

端口号:110

SMTP服务器: smtp.163.com

端口号:25

IMAP服务器: imap.163.com

端口号:143

这里我是用的是SMTP服务器,端口号为25(这里的"收件人"其实应该填写端口号,placeholder有提示的)


开启邮箱验证:

这里的邮箱即为发送告警信息的邮箱,密码为上面开通POP3/STMP服务提供的设备授权码

展示方式根据个人喜好填写即可

然后点击测试,会向收件人邮箱发送一封邮件内容如下:

测试通过后保存即可

3.新建报警组

报警实例需要添加到报警组中才可生效;

4.作业配置指定报警组

在【数据开发】—【作业配置】中选择告警组:

保存后点击【发布】:

发布后点击【上线】(上线后告警才能生效):

在【运维中心】中可以看到作业已经上线:

此时取消作业,会在邮箱中收到告警信息:

同时也可以在【运维中心】—【告警记录】中查看告警记录:

未完待续~

学习内容参考:尚硅谷大数据技术之Dinky(尚硅谷&Dinky官方联合推出)_哔哩哔哩_bilibili 

内容资料下载(尚硅谷官方网盘):百度网盘 请输入提取码

jar包搜索下载:Maven Repository: Search/Browse/Explore (mvnrepository.com)

pdf版本笔记下载:dinky(0.7.3)学习笔记资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1979-A threshold selection method from gray-level histograms

1 论文简介 《A threshold selection method from gray-level histograms》是由日本学者大津于 1979 年发表在 IEEE TRANSACTIONS ON SYSTEMS 上的一篇论文。该论文提出了一种基于图像灰度直方图的阈值化方法&#xff0c;计算简单&#xff0c;且不受图像亮度和对比度的影响&am…

64.Spring事件监听的核心机制是什么?

Spring事件监听的核心机制是什么? spring的事件监听有三个部分组成 事件(ApplicationEvent) 负责对应相应监听器 事件源发生某事件是特定事件监听器被触发的原因监听器(ApplicationListener) 对应于观察者模式中的观察者。监听器监听特定事件,并在内部定义了事件发生后的响应…

【论文阅读】ControlNet、文章作者 github 上的 discussions

文章目录 IntroductionMethodControlNetControlNet for Text-to-Image DiffusionTrainingInference Experiments消融实验定量分析 在作者 github 上的一些讨论消融实验更进一步的探索Precomputed ControlNet 加快模型推理迁移控制能力到其他 SD1.X 模型上其他 Introduction 提…

烟火检测/区域人流统计/AI智能分析网关V4如何配置通道?

TSINGSEE青犀智能分析网关&#xff08;V4版&#xff09;是一款高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;硬件内部署了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;并上报识别结果&#xff0c;并能进行语音…

【征服redis2】redis的事务介绍

目录 目录 1.redis事务介绍 2 事务出错的处理 3.Java如何使用redis事务 1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用&#xff0c;本文我们来看一下redis的事务问题。事务也是数据库的重要主题&#xff0c;熟悉关系型数据库的读者应该对事务比较了解&a…

erlang (OS 操作模块)学习笔记

cmd: env: 返回所有环境变量的列表。 每个环境变量都表示为元组 {VarName&#xff0c;Value}&#xff0c;其中 VarName 是 变量和 Value 其值。 例: {VarName&#xff0c;Value} {"ERLANG_HOME","C:\\Program Files\\erl-24.3.4.2\\bin\\erl-24.3.4.2"}…

2023我的总结:读书、写作、运动、爱家人、学一门手艺

不知不觉中&#xff0c;2024年1月已过去大半了&#xff0c;按照惯例&#xff0c;还是对过去一年的所思所行做个简单的汇报。也希望我的一些经历&#xff0c;能给到正在做年终总结或新年规划的朋友&#xff0c;一些参考。 01 读书&#xff0c;是门槛最低的高贵 最近一段时间&am…

gh0st远程控制——客户端界面编写(二)

● 补充小知识&#xff1a;枚举类型的使用 每个控件&#xff08;比如列表&#xff09;都对应一个自己的唯一的变量 使用枚举类型可以将变量名与编号进行绑定&#xff0c;以后程序需要扩展的时候&#xff0c;只需要在定义枚举变量的位置重新修改编号就可以了&#xff0c;这样全…

Linux shell编程学习笔记40:stat命令

程序员必备的面试技巧 “程序员必备的面试技巧&#xff0c;就像是编写一段完美的代码一样重要。在面试战场上&#xff0c;我们需要像忍者一样灵活&#xff0c;像侦探一样聪明&#xff0c;还要像无敌铁金刚一样坚定。只有掌握了这些技巧&#xff0c;我们才能在面试的舞台上闪耀…

htb monitored root方式其中的一种(仅作记录)

快下班时候审出来的&#xff0c;目前root的第5种方式 nagiosmonitored:~$ cat /usr/local/nagiosxi/scripts/backup_xi.sh #!/bin/bash # # Creates a Full Backup of Nagios XI # Copyright (c) 2011-2020 Nagios Enterprises, LLC. All rights reserved. #BASEDIR$(dirname …

SCI 2区论文:医疗保健中心训练有素的脑膜瘤分割模型的性能测试-基于四个回顾性多中心数据集的二次分析

基本信息 标题&#xff1a;Performance Test of a Well-Trained Model for Meningioma Segmentation in Health Care Centers: Secondary Analysis Based on Four Retrospective Multicenter Data Sets中文标题&#xff1a;医疗保健中心训练有素的脑膜瘤分割模型的性能测试&am…

PE解释器之PE文件结构(二)

接下来的内容是对IMAGE_OPTIONAL_HEADER32中的最后一个成员DataDirectory&#xff0c;虽然他只是一个结构体数组&#xff0c;每个结构体的大小也不过是个字节&#xff0c;但是它却是PE文件中最重要的成员。PE装载器通过查看它才能准确的找到某个函数或某个资源。 一&#xff1…

软件测试|sqlalchemy一对一关系详解

简介 SQLAlchemy 是一个强大的 Python ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它允许我们将数据库表映射到 Python 对象&#xff0c;并提供了丰富的关系模型来处理不同类型的关系&#xff0c;包括一对一关系。在本文中&#xff0c;我们将深入探讨 SQLAlchemy …

Ubuntu使用QtCreator + CMake 开发C/C++程序

平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …

Hugging Face怎么通过国内镜像去进行模型下载(hf-mirror.com)

一、引言 Hugging Face &#x1f917;是一家专注于自然语言处理&#xff08;NLP&#xff09;技术的公司&#xff0c;以其开源贡献和先进的机器学习模型而闻名。该公司最著名的产品是 Transformers 库&#xff0c;这是一个广泛使用的 Python 库&#xff0c;它提供了大量预训练模…

(Bean实例化的基本流程 )学习Spring的第六天

Bean实例化的基本流程 其实可以解释为三个过程: 1 . 有关Bean的信息被封装成一个map集合 : DeanDefinitionMap . key为Bean的名称 , value为有关<bena>标签的信息 2 . Spring框架对这个存储Bean信息的Map进行遍历 , 进行创建对象 , 把创建好的对象存储到另一个Map集合里…

深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置

Kubernetes Ingress 是 Kubernetes 集群中外部流量管理的重要组件。它为用户提供了一种直观而强大的方式&#xff0c;通过定义规则和配置&#xff0c;来控制外部流量的路由和访问。 1. 什么是 Ingress&#xff1f; 在 Kubernetes 中&#xff0c;Ingress 是一种 API 资源&#…

取代房子,中国又一种资本在崛起(深度)

我一直有一个观点&#xff1a;经济形势好的时候&#xff0c;只要不是夕阳行业&#xff0c;做什么都能过得不错。经济形势差的时候&#xff0c;对于个人来说&#xff0c;拼的就是学习能力。 10年前&#xff0c;在市场上很吃香的是MBA&#xff0c;那时候企业需要高速发展&#x…

JVM工作原理与实战(二十):直接内存

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、直接内存 1.直接内存作用 二、在直接内存上创建数据 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&#xff0c;管理内存&#xff0c;确保安全&…