Dinky在Kubernetes的实践分享

2022-04-07 13:56:48 浏览数 (1)

摘要:本文介绍了 dinky 在 Flink on Kubernetes 的实践分享。内容包括:

  1. 前言
  2. Kubernetes Native Session
  3. Kubernetes Native Application
  4. 优点
  5. 不足与建议
  6. 总结

Tips:历史传送门~

《Dinky在IDEA远程调试实践分享》

《Flink CDC 和 kafka 进行多源合并和下游同步更新》

《Dlink 在 FinkCDC 流式入湖 Hudi 的实践分享》

《Dlink 在 Flink-mysql-cdc 到 Doris 的实践》

GitHub 地址

https://github.com/DataLinkDC/dlink

https://gitee.com/DataLinkDC/dlink

欢迎大家关注 Dlink 的发展~

一、前言

Apache Flink(分布式计算框架)和 Kubernetes(资源管理调度)作为当下最流行的技术,将两者结合使用也是必需的。怎么才能方便的操作 Flink?怎么才能方便的操作 Flink on Kubernetes ?

目前 Flink 在 Kubernetes 的应用逐渐成熟,我司目前也应用了 Flink on Kubernetes, 但缺乏一套 Flink 运维平台,在调研多个开源项目后,发现 dinky (原dlink)的设计更符合我们的需求,但其主要偏 on yarn 的应用,虽然支持k8s,但缺乏文档支持,我们便进行了这方面的探索,主要分为 Native Session 和 Native Application 两个方向,在此分享下实践经验,如有错误还请更正。

二、Kubernetes Native Session

1.编译部署dinky

1、服务器编译环境准备(依据官网):

2、拉取源码到指定服务器:

https://github.com/DataLinkDC/dlink/tree/dev

3、编译打包。

代码语言:javascript复制
cd dlink
mvn clean install -Dmaven.test.skip=true

4、拷贝安装包到指定目录,并解压。

代码语言:javascript复制
cp ./build/dlink-release-0.6.0-SNAPSHOT.tar.gz /home/dinky
tar -zxvf /home/dinky/dlink-release-0.6.0-SNAPSHOT.tar.gz

5、进入dlink-release-0.6.0-SNAPSHOT目录:

根据sql脚本,升级选 dlink_history.sql 根据日期找到自己的基准日期,执行后续的sql,否则首次使用则可直接执行 dlink.sql。

6、配置数据库链接:

代码语言:javascript复制
vim config/application.yml

7、根据flink版本:将对应的 dlink-client jar 包移动到lib目录(本篇分享使用的 Flink 版本为1.14.3):

代码语言:javascript复制
mv extends/dlink-client-1.14-0.6.0-SNAPSHOT.jar ./lib

8、根据flink版本:将对应的依赖,以及接下来需要使用的第三方依赖放入plugins目录下:

创建plugins:

代码语言:javascript复制
mkdir plugins

本文使用的是flink 1.14.3版本:plugins下面的jar有:

9、启动dinky:

代码语言:javascript复制
 ./auto.sh start

2.Flink镜像制作(可选)

1、如果有自定义包需要提供的话,flink镜像制作:

代码语言:javascript复制
docker pull flink:1.14.3-scala_2.11-java8
docker run -d -e FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" --name=flink_jobmanager flink:1.14.3-scala_2.11-java8 jobmanager
docker exec -it flink_job
docker cp /root/flink-jar/flink-sql-connector-mysql-cdc-2.1.1.jar acfd540eaf7e:/opt/flink/libmanager /bin/bash
ls /opt/flink/lib
docker cp /root/flink-jar/flink-sql-connector-mysql-cdc-2.1.1.jar acfd540eaf7e:/opt/flink/lib
docker commit -m="flink-custom-lib" -a="sss"  flink_jobmanager flink_cl_v1:1.14.3-scala_2.11-java8

最后push到自己的仓库。

3.Dinky 基本配置

1、平台首页 http://localhost:8888

默认用户名/密码:admin/admin

2、修改下sql分隔符,推荐改为 ;rn 作为分割符。

4.注册 Native Session 集群实例

1、开启 k8s native session 的 NodePort,暴露 FlinkWebUI 地址和端口。

2、添加k8s session集群:

5.作业开发

1、新增目录,创建任务:

图中Flink集群下拉框中的 yarn-session 仅作为分类标志,不影响使用,以唯一标识为准,即集群名称。

三、Kuberbetes Native Application

(需要确保部署服务器上已安装kubectl,可以正常连通k8s)

1.编译部署dinky

1、重复 native session模式下的 编译部署dinky操作。

2、启动dinky。

2.Flink 镜像制作

1、参照上文Flink镜像制作,将/home/dinky/dlink-release-0.6.0-SNAPSHOT/jar/dlink-app-0.6.0-SNAPSHOT-jar-with-dependencies.jar 打包至docker 镜像中。

2、配置dinky的 通用模板 Jar 路径:local:///opt/flink/lib/dlink-app-0.6.0-SNAPSHOT-jar-with-dependencies.jar。

3.Dinky 注册集群配置

1、配置k8s application 集群模板:

其中 cluster-id 默认以作业名称作为更高优先级的配置,也可以使用最高优先级配置的方法(set 语法)指定:

优先级由低到高:Flink配置文件<集群配置<树节点name<右侧其他配置<右侧作业名<set kubernetes.cluster-id = 'k8s-app1';

代码语言:javascript复制
set kubernetes.cluster-id = 'k8s-flink-app';

4.作业开发

1、提交application任务:

2、通过历史查看任务提交记录:

四、优点

1.FlinkSQL 交互开发

dinky 改变了传统的 Flink SQL 作业的开发和运维方式,通过基于Flink源码定制的平台化能力,大大降低了企业内Flink的使用成本。相比于其他的开源项目,它带来了更专业的功能与更低成本的开发运维。

2.不存在镜像过多或冗余的问题

dinky 通过 dlink-app 的镜像统一提交 FlinkSQL 任务,不需要搭建其他镜像,缩短了 FlinkSQL Application 的任务提交流程,提升了提交速度,最主要的是不会产生其他大量镜像,尤其存在大量作业的情况下,该优势更为明显。

五、不足与建议

1.对udf和依赖扩展自动化支持有限

目前版本来看,扩展udf和其他依赖时,需要手动重新构建镜像。建议后续可以添加可视化及自动化的构建部署镜像支持。

2.当dinky自身进行扩展时需要重启dinky进程

扩展 flink 的udf、连接器及其他依赖时,需要重启应用才可生效。

3.对k8s Application 的 Jar 任务支持不友好

目前 dinky 的 Jar 管理的任务 Jar 无法直接应用到 k8s 模式,需要手动构建镜像,建议可以自动化构建部署镜像。

六、总结

Flink on kubernetes,面对新的架构,怎么能简单操作,快速上手?

在使用dinky一段时间后,总体感觉不错!sql平台简单易用,可以提高开发效率。功能点也挺多的,作者也在积极的迭代,也在不断的完善中。期待后续的udf功能完善、自动化构建镜像、代码jar功能等。推荐试用。

0 人点赞