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

本文涉及的产品
实时计算 Flink 版,5000CU*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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
1月前
|
关系型数据库 MySQL API
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
druid Java 数据库
Spring Boot的定时任务与异步任务
Spring Boot的定时任务与异步任务
|
1月前
|
监控 关系型数据库 MySQL
Flink CDC产品常见问题之flink-cdc任务抓取全量的mysql数据不生效如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
|
2月前
|
消息中间件 SQL JSON
Flink问题之source并行度不同导致任务没有数据落地如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
332 0
|
1月前
|
Java 调度 流计算
有没有 大佬用 springboot 启动flink 处理 ,发现springboot 加 schedule调度处理会内存占满情况?
有没有 大佬用 springboot 启动flink 处理 ,发现springboot 加 schedule调度处理会内存占满情况?
28 6
|
8天前
|
存储 监控 调度
【Flink】怎么提交的实时任务,有多少Job Manager?
【4月更文挑战第18天】【Flink】怎么提交的实时任务,有多少Job Manager?
|
26天前
|
Java Spring
SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
24 0
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
53 2
|
1月前
|
关系型数据库 MySQL API
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决