坑点描述

ververica平台是Ververica公司的针对flink商业产品。个人出于实践探索的目的,切实调研了一下该平台的功能。因为公司服务都部署在k8s环境中,所以搭建该平台使用了容器镜像的方式。过程中发现,这玩意上手是真不容易,坑比预想的多多了。坑点如下:

flink版本使用内部镜像而非基于alibaba开源镜像

为什么商业公司都这么热衷使用内部镜像,个人一直搞不懂。看到这个就不放心以后服务跑着跑着就宕机了,网上还查不到相关资料。所以果断选择使用自己的镜像,手动修改yaml配置走起(可以手动修改配置还是比较人性化)。
在这里插入图片描述

合并自定义镜像与平台提供镜像差异

镜像的环境差异真不小,从java版本、全局变量、配置文件路径这些都不太一样了。好在这些静态的配置差异都很容易被发现,麻烦的是运行时的不一致,比如下面这个脚本因为参数顺序不同导致log_setting的日志参数与FLINk_ENV_JAVA_OPTS的日志参数互相覆盖(后者覆盖前者),进而导致运行自定义镜像上来就一个错: 日志文件File Not Found。。。

自定义镜像配置, 使用默认日志文件路径

在这里插入图片描述

官方镜像配置,覆盖默认日志文件配置,使用自定义日志文件路径

在这里插入图片描述
这里debug耗时半天。。
此外,flink配置文件flink-conf.yaml和运行依赖jar包,vvp会挂载到/flink/conf 和 /flink/usrlib路径下。这里咱们直接删掉自己镜像里的conf和usrlib目录,通过软连接的方式使用vvp的配置就行。

Deployment固定使用Application模式部署,无法指定其他部署模式

问题发生是在基本解决完环境问题后,心里乐呵呵的觉得这下应该没啥问题了吧,上传jar包搞定,配置参数ok,点击部署,去喝口水等等应该就完事了。3分钟后。。任务没起来,怎么没起来呢?满脑子装着不相信,然后进入了日志页面,一个神奇的错误发生了,‘The application contains no execute() calls’ 。
对着这个错误,我愣了几秒,然后又苦思了几分钟,果然一点没有想法。无奈向度娘求救,但没有搜到任何关键信息。再次无奈向大佬求救,大佬反问vvp是啥玩意?哎,就在低头叹气之时,忽然想起还有最终杀器:github。于是乎我在github上搜索并进入了flink官方开源库,从关键代码一行行看、一层层捋,起初忽见似有眉目,但转眼又被各种工厂模式、访问者模式等弄得思路模糊。功夫不怕有心人,代码还怕真码农,经过一段时间的琢磨,发现了问题所在。
原来它xx的使用的是Application模式部署任务,而不是perJob。为什么部署的时候没有任何地方提示当前任务的部署模式?如果想自定义部署方式的话又在哪里修改?了解到问题所在,后面就是一顿大改了。此处省略1万个字。。。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐