在使用Spring Boot启动Flink处理任务时

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 在使用Spring Boot启动Flink处理任务时【1月更文挑战第22天】【1月更文挑战第108篇】

在使用Spring Boot启动Flink处理任务时,如果使用了Spring Boot的@Scheduled注解进行定时任务调度,可能会出现内存占用过高的情况。这是因为Spring Boot的@Scheduled注解会在一个新的线程中执行定时任务,而这个新的线程会持有Flink环境的引用,导致Flink环境无法被垃圾回收。

解决这个问题的方法是在定时任务中使用Flink的executeAsync方法异步执行Flink任务。这样可以确保Flink任务在新的线程中执行,而不影响主线程。同时,由于Flink任务在新的线程中执行,所以Flink环境可以被垃圾回收,从而避免了内存占用过高的问题。

以下是一个示例代码:

@Scheduled(fixedRate = 5000)
public void executeFlinkJob() {
   
    ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
    // 设置Flink任务的参数是的,我遇到过类似的问题。在使用Spring Boot启动Flink处理任务时,如果使用了Spring Boot的@Scheduled注解进行定时任务调度,可能会出现内存占用过高的情况。这是因为Spring Boot的@Scheduled注解会在一个新的线程中执行定时任务,而这个新的线程会持有Flink环境的引用,导致Flink环境无法被垃圾回收。

解决这个问题的方法是在定时任务中使用Flink的executeAsync方法异步执行Flink任务。这样可以确保Flink任务在新的线程中执行,而不影响主线程。同时,由于Flink任务在新的线程中执行,所以Flink环境可以被垃圾回收,从而避免了内存占用过高的问题。

以下是一个示例代码:

```java
@Scheduled(fixedRate = 5000)
public void executeFlinkJob() {
   
    ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
    // 设置Flink任务的参数
    env.setParallelism(1);
    // 定义Flink任务
    DataSet<String> dataSet = env.readTextFile("path/to/your/file");
    dataSet.filter(value -> value.contains("keyword"))
            .writeAsText("path/to/output/file");
    // 异步执行Flink任务
    env.executeAsync("Flink Job Name");
}

在这个示例中,我们使用Spring Boot的@Scheduled注解设置了每5秒执行一次Flink任务。在执行Flink任务时,我们使用了executeAsync方法异步执行Flink任务,这样就可以避免内存占用过高的问题。
env.setParallelism(1);
// 定义Flink任务
DataSet dataSet = env.readTextFile("path/to/your/file");
dataSet.filter(value -> value.contains("keyword"))
.writeAsText("path/to/output/file");
// 异步执行Flink任务
env.executeAsync("Flink Job Name");
}
```

在这个示例中,我们使用Spring Boot的@Scheduled注解设置了每5秒执行一次Flink任务。在执行Flink任务时,我们使用了executeAsync方法异步执行Flink任务,这样就可以避免内存占用过高的问题。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
4月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
578 2
|
4月前
|
人工智能 安全 Java
Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
在Java开发中,处理大规模数据时常常需要将列表拆分为多个子列表进行异步处理并汇总结果。本文介绍如何在Spring Boot中使用Function和异步线程池实现高效且可维护的代码,涵盖结果封装、线程池配置、列表拆分处理及结果汇总等关键步骤。
219 0
|
5月前
|
SQL JSON Java
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
92 0
|
5月前
|
Java Spring
如何优雅的实现 SpringBoot 并行任务
我是小假 期待与你的下一次相遇 ~
145 1
|
7月前
|
SQL 运维 Java
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
本文介绍了对Flink实时计算编译任务的Koupleless架构改造。为解决进程模型带来的响应慢、资源消耗大等问题,团队将进程模型改为线程模型,并借助Koupleless的类加载隔离能力实现版本和包的隔离。通过动态装配Plugin及其Classpath,以及Biz运行时仅对依赖Plugin可见的设计,大幅优化了编译任务的性能。结果表明,新架构使编译耗时降低50%,吞吐量提升5倍以上。
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
|
5月前
|
Java 调度 流计算
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
344 0
|
9月前
|
Java 关系型数据库 MySQL
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
2373 45
|
10月前
|
Java 调度 数据库
SpringBoot整合XXL-JOB【05】- 任务分片
在实际业务中,批量定时任务可能因上一批任务未完成而影响业务。为解决此问题,本文介绍如何使用Xxl-job对批量任务进行分片处理,通过分片广播形式调度集群机器并行执行任务,大幅提升执行效率。具体步骤包括环境准备、添加依赖和配置、声明实体类与查询类,以及改造业务逻辑实现分片查询。测试结果显示,分片处理将两千条数据的执行时间从30秒缩短至15秒,性能提升显著。
1226 13
SpringBoot整合XXL-JOB【05】-  任务分片
|
10月前
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
1352 0
SpringBoot整合Flowable【07】- 驳回节点任务