26、使用StreamPark管理Flink作业中,关于flink on k8s部分的提交处理
之前使用云上产品(华为云DLI)来管理Flink作业,在使用过程中发现几个痛点:
1.监控指标太少了,
2.作业内部发生异常情况重启,居然不会告警,
3.资源粒度太大了,最小为1CU(1核4g),对于我们大部分都是小规模作业来说,资源浪费严重,ps:2024年国庆后好像上新功能,最小粒度为0.5CU了,
4.flink相关的包出现过仓库没有的情况,是flink-cdc-connector相关的,其它的包依赖也整了好久,虽然之前迁云的时候已经处理好了,但是总归体验不好。
这里吐槽一句,针对flink作业的管理的云产品来说,阿里云,腾讯云甩华为云的产品好几条街😅。
已经整体迁移到华为云了,就没办法再想其它云产品了。就把目标转向了开源产品。
github启动,点开几年前试用过的streampark,当时还是叫streamX来着。
clone项目(2.1.4版本),下载压缩包,测试服务器解压,配置,创建作业,启动~。
这里主要记录一下在streampark上使用flink on k8s遇到的一些问题,有的改了streampark源码,有的改了作业代码。
这里记录一下提交问题的处理:
描述:我用的是华为云的cci集群, 当时将flink作业提交到k8s后,虽然作业的taskmanager启动会很久,但是最终还是启动起来了,但是streampark却把作业识别为启动失败。
原因:
在这个类方法中 org.apache.streampark.flink.kubernetes.watcher.FlinkJobStatusWatcher#touchApplicationJob
拿到jobmanager url后会通过flink的restapi去拉取job list,但是这个时候cci上taskmanager还没启动来(太慢了~),就会拿到空的joblist,同样clusterid也是没有的,所以后面走的org.apache.streampark.flink.kubernetes.watcher.FlinkJobStatusWatcher#inferStateFromK8sEvent方法也是拿到不对的状态。
解决办法:很简单,根据cci上taskmanager启动的时间,给它增加一定的重试次数。重试次数通过配置传入