曾经天真的我以为在JAVA中做定时任务只有quartz、xxl-job、elastic-job
直到那天公司领导向我推荐了spring cloud data flow和kubernetes cronjob
随后我快速去体验了一把它们的特点,而当再回过头来看我之前所了解的定时任务框架,便感觉很难再爱了
废话不多说,趁着激情还未褪去,带大家一共快速领略一下吧
spring cloud data flow安装
对于spring cloud data flow的安装这里就不记录和演示了,因为官网比我写的好上很多
安装过程一切以spring cloud data flow官方文档为准即可,以下为官方文档链接地址:
https://dataflow.spring.io/docs/installation/
kubernetes下安装注意事项
在k8s环境中安装spring cloud data flow,其安装yaml直接从github上可以找到,地址为:
https://github.com/spring-cloud/spring-cloud-dataflow/tree/master/src/kubernetes
为了查看与编辑方便,可以将其项目的整个源码clone下来慢慢品味
经过我的好几次不同k8s环境安装踩坑记录,有以下几点记录一下
- 在具体安装时,如果需要将spring cloud data flow安装到非default命名空间下,记得自己指定下对应的name sapce
- 如果只是想运行定时任务,skipper组件和监控相关的组件不是必要组件,可以根据自己的需要来进行安装
- 安装prometheus时如果spring cloud data flow不是安装在默认的default命名空间下的,记得修改prometheus-configmap.yaml中的namespaces配置
- 官方提供的springcloud/spring-cloud-dataflow-grafana-prometheus镜像在初始化时会先安装grafana的插件,如果没有科学上网的网络环境,可以通过在对应的deployment的yaml配置中指定http/https代理,再将promethues的域名请求屏蔽掉(NO_PROXY)以加快插件下载速度
- 每个deployment的默认时区都不是东八区,如果修改可通过环境变量来指定时区
- skipper与spring cloud data flow的数据库名是可以手动修改的,如有需要请自行指定
- mysql和rabbitmq如果自己环境中已经有的话,是可以不用再部署的,直接用现成的即可
- 默认的svc配置文件中服务暴露类型都是LoadBalancer,请根据自己需要进行修改
- spring cloud data flow的dashborad也是可以设权限验证的,只不过比较麻烦,详情可参考官方api文档
- 对于data flow中的task或stream中的通用配置可以配置到环境变量中,通过environmentVariables来指定,k8s中可配置项目见此链接
- kubernetes中cronjob的触发时间是以kube-controller-manager容器的时区为准的,默认为utc时间,如果时区不一致可能会导致任务执行时间不准确,修改kube-controller-manager的时区即可
spring cloud task体验
在安装好了spring cloud data flow后就可以很方便地来管理task或stream类型的任务了,为了简单就先来体验一下spring cloud task的任务,以官方的开源任务为例,可按以下步聚进行添加:
https://dataflow.spring.io/docs/batch-developer-guides/getting-started/task/
uri处填入:
docker:springcloudtask/timestamp-task:2.1.1.RELEASE
随后创建task后再点击launch task
点击launch后会在k8s中创建一个pod来运行对应的任务
从pod的运行参数中我们也可以看出之前我们设置在spring cloud data flow server中的配置信息也注入到了这个pod中
创建定时任务体验
在有了task后便可以创建task对应的cron表达式了,也就是Schedule
在task详情界面中点击Schedule按钮即可进行创建,再输入对应的cron表达式与名称即可
创建好后再观察下k8s的dashboard
通过k8s的dashboard我们可知,spring cloud data flow创建的schedules也就是kubernetes中的cron jobs
spring cloud task运行monitor体验
在体验spring cloud data flow的监控前需要确保promethues组件和grafana已经安装好,grafana如果用的spring cloud data flow官方的yaml安装的,如果没有科学上网的网络环境可能需要一定的时间,因为它会从grafana的官网下载插件,如果有科学上网的网络环境的话下载还是挺快的,比如我这里操作的这样:
待一切需要的组件都部署好后就可以来体验一下spring cloud data flow的监控了
官方提供的可用于体验监控的task镜像为:
docker://springcloud/task-demo-metrics:latest
其添加步鄹与运行步鄹不再复述,当创建好或执行了上面的任务后,可直接登录grafana监控界面进行查看,或直接在spring cloud data flow的dashboard中直接进入也可以
其grafana界面为:
从这个界面中可以看到采集到promethues中关于job的一些相关数据,如执行过的task总数、目前处于运行中的task总数、task执行的开始与结束时间、task执行的时长等数据
当然spring cloud data flow的server端的数据也可以在grafana中可以看到,比如下图这样:
关于jvm的数据也同样可以观察到
有了promethues的数据采集和grafana的数据图表展示,再借助grafana的告警功能,我们便也可以实现某些自定义指标的告警功能,告警的渠道也挺多的,常见的钉钉、邮件、电话、web hook啥的都有,简直完美
stream组件支持
除了演示的这些功能外,spring cloud data flow还具管理spring cloud stream的功能,并且它还将一些常见的组件做了提供
其创建stream的界面也很直观:
对于stream相关的操作这里就先不演示了,感兴趣的可以自行研究一下
最后想说
spring cloud data flow确实很强大!感谢spring cloud data flow大佬们的开源!
不早了,准备睡觉了
在两个工作日下班后的空余时间在家码完此文!欢迎点赞!