Spring Boot 整合 Apache Flink 教程

06-01 1267阅读

精心整理了最新的面试资料和简历模板,有需要的可以自行获取

点击前往百度网盘获取

点击前往夸克网盘获取


Spring Boot 整合 Apache Flink 教程

一、背景与目标

Apache Flink 是一个高性能的分布式流处理框架,而Spring Boot提供了快速构建企业级应用的能力。整合二者可实现:

  1. 利用Spring Boot的依赖注入、配置管理等功能简化Flink作业开发
  2. 构建完整的微服务架构,将流处理嵌入Spring生态
  3. 实现动态作业提交与管理

二、环境准备

  • JDK 17+
  • Maven 3.8+
  • Spring Boot 3.1.5
  • Flink 1.17.2

    三、创建项目 & 添加依赖

    1. 创建Spring Boot项目

    使用Spring Initializr生成基础项目,选择:

    • Maven
    • Spring Web(可选,用于创建REST接口)

      2. 添加Flink依赖

      
          
          
              org.springframework.boot
              spring-boot-starter
          
          
          
              org.apache.flink
              flink-java
              1.17.2
              provided
          
          
              org.apache.flink
              flink-streaming-java
              1.17.2
              provided
          
          
          
              org.apache.flink
              flink-runtime
              1.17.2
              test
          
      
      

      四、基础整合示例

      1. 编写Flink流处理作业

      // src/main/java/com/example/demo/flink/WordCountJob.java
      import org.apache.flink.api.common.functions.FlatMapFunction;
      import org.apache.flink.streaming.api.datastream.DataStream;
      import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
      import org.apache.flink.util.Collector;
      public class WordCountJob {
          public static void execute() throws Exception {
              final StreamExecutionEnvironment env = 
                  StreamExecutionEnvironment.getExecutionEnvironment();
              DataStream text = env.fromElements(
                  "Spring Boot整合Flink",
                  "Flink实时流处理",
                  "Spring生态集成"
              );
              DataStream counts = text
                  .flatMap(new FlatMapFunction() {
                      @Override
                      public void flatMap(String value, Collector out) {
                          for (String word : value.split("\\s")) {
                              out.collect(new WordCount(word, 1L));
                          }
                      }
                  })
                  .keyBy(value -> value.word)
                  .sum("count");
              counts.print();
              env.execute("Spring Boot Flink Job");
          }
          public static class WordCount {
              public String word;
              public long count;
              public WordCount() {}
              public WordCount(String word, long count) {
                  this.word = word;
                  this.count = count;
              }
              @Override
              public String toString() {
                  return word + " : " + count;
              }
          }
      }
      

      2. 在Spring Boot中启动作业

      // src/main/java/com/example/demo/DemoApplication.java
      @SpringBootApplication
      public class DemoApplication implements CommandLineRunner {
          public static void main(String[] args) {
              SpringApplication.run(DemoApplication.class, args);
          }
          @Override
          public void run(String... args) throws Exception {
              WordCountJob.execute(); // 启动Flink作业
          }
      }
      

      五、进阶整合 - 通过REST API动态提交作业

      1. 创建Job提交服务

      // src/main/java/com/example/demo/service/FlinkJobService.java
      @Service
      public class FlinkJobService {
          public String submitWordCountJob(List inputLines) {
              try {
                  final StreamExecutionEnvironment env = 
                      StreamExecutionEnvironment.getExecutionEnvironment();
                  
                  DataStream text = env.fromCollection(inputLines);
                  
                  // ...(同上WordCount逻辑)
                  
                  JobExecutionResult result = env.execute();
                  return "JobID: " + result.getJobID();
              } catch (Exception e) {
                  return "Job Failed: " + e.getMessage();
              }
          }
      }
      

      2. 创建REST控制器

      // src/main/java/com/example/demo/controller/JobController.java
      @RestController
      @RequestMapping("/jobs")
      public class JobController {
          @Autowired
          private FlinkJobService flinkJobService;
          @PostMapping("/wordcount")
          public String submitWordCount(@RequestBody List inputs) {
              return flinkJobService.submitWordCountJob(inputs);
          }
      }
      

      六、关键配置说明

      1. application.properties

      # 设置Flink本地执行环境
      spring.flink.local.enabled=true
      spring.flink.job.name=SpringBootFlinkJob
      # 调整并行度(根据CPU核心数)
      spring.flink.parallelism=4
      

      2. 解决依赖冲突

      在pom.xml中排除冲突依赖:

          org.apache.flink
          flink-core
          1.17.2
          
              
                  log4j
                  log4j
              
          
      
      

      七、运行与验证

      1. 启动Spring Boot应用:
      mvn spring-boot:run
      
      1. 调用API提交作业:
      curl -X POST -H "Content-Type: application/json" \
      -d '["Hello Flink", "Spring Boot Integration"]' \
      http://localhost:8080/jobs/wordcount
      
      1. 查看控制台输出:
      Flink> Spring : 1
      Flink> Boot : 1
      Flink> Integration : 1
      ...
      

      八、生产环境注意事项

      1. 集群部署:将打包后的jar提交到Flink集群

        flink run -c com.example.demo.DemoApplication your-application.jar
        
      2. 状态管理:集成Flink State Backend(如RocksDB)

      3. 监控集成:通过Micrometer接入Spring Boot Actuator

      4. 资源隔离:使用Yarn或Kubernetes部署模式


      九、完整项目结构

      src/
      ├── main/
      │   ├── java/
      │   │   ├── com/example/demo/
      │   │   │   ├── DemoApplication.java
      │   │   │   ├── flink/
      │   │   │   │   └── WordCountJob.java
      │   │   │   ├── controller/
      │   │   │   ├── service/
      │   ├── resources/
      │   │   └── application.properties
      pom.xml
      

      通过以上步骤,即可实现Spring Boot与Apache Flink的深度整合。这种架构特别适合需要将实时流处理能力嵌入微服务体系的场景,如实时风控系统、IoT数据处理平台等。后续可扩展集成Kafka、HBase等大数据组件。

      Spring Boot 整合 Apache Flink 教程
      (图片来源网络,侵删)
      Spring Boot 整合 Apache Flink 教程
      (图片来源网络,侵删)
      Spring Boot 整合 Apache Flink 教程
      (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码