java怎么用Flink呢

用 Java 开发 Apache Flink 程序 是目前最主流的方式之一(Flink 本身就是用 Scala + Java 写的),DataStream API(流处理)和 Table API/SQL 都支持 Java,而且文档和社区资源最丰富。

下面一步步教你怎么上手(基于 2026 年最新 Flink 2.x 系列,兼容性很好):

1. 环境准备(必须的)

  • JDK:11 或 17(推荐 17,Flink 2.x 支持很好)
  • Maven:3.6+(或 Gradle)
  • IDE:IntelliJ IDEA 推荐(内置 Maven 支持超好),Eclipse 也行
  • 可选:本地安装 Flink(用于提交 job 测试),但开发阶段可以直接在 IDE 里跑

2. 最快方式:用 Maven 骨架生成项目(官方推荐)

在命令行运行下面命令(会自动生成一个标准 Flink Java 项目):

Bash

复制代码
mvn archetype:generate \
  -DarchetypeGroupId=org.apache.flink \
  -DarchetypeArtifactId=flink-quickstart-java \
  -DarchetypeVersion=2.2.0  # 改成你想用的版本,最新是 2.2.x
  • 它会问你 groupId、artifactId、package 等,按需填(比如 groupId=com.example,artifactId=flink-demo)
  • 生成后进项目目录:cd flink-demo

项目结构大概长这样:

text

复制代码
src/main/java/com/example/
├── StreamingJob.java     ← 流处理模板
└── BatchJob.java         ← 批处理模板(现在很少用)

3. 最简单的 Hello World 示例(流处理版)

直接替换 StreamingJob.java 里的内容为下面这个超级简单的例子(把数字翻倍并打印):

Java

复制代码
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;

public class StreamingJob {

    public static void main(String[] args) throws Exception {

        // 1. 创建执行环境(本地模式自动)
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 2. 从内存创建数据源(模拟无限流)
        DataStream<Integer> numbers = env.fromElements(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 3. 简单 transformation:每个数 × 2
        DataStream<Integer> doubled = numbers.map(n -> n * 2);

        // 4. 输出到控制台
        doubled.print();

        // 5. 执行(这行很重要!)
        env.execute("My First Flink Java Job");
    }
}
  • 在 IntelliJ 里右键 → Run 'StreamingJob.main()' 就能跑

  • 控制台会看到输出: text

    复制代码
    2
    4
    6
    ...
    20

这就是最基础的 Flink Java 程序了!(数据进来 → 处理 → 输出)

4. 经典例子:WordCount(实时版,从 socket 读)

很多人第一个真实例子都用这个(监听本地 socket,统计单词):

Java

复制代码
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class SocketWordCount {

    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 从 socket 读(nc -lk 9999 发数据测试)
        DataStream<String> text = env.socketTextStream("localhost", 9999);

        DataStream<Tuple2<String, Integer>> wordCounts = text
                .flatMap(new Splitter())           // 切分单词
                .keyBy(0)                          // 按单词分组
                .sum(1);                           // 累加计数

        wordCounts.print();

        env.execute("Socket Window WordCount");
    }

    public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) {
            for (String word : sentence.split(" ")) {
                out.collect(new Tuple2<>(word, 1));
            }
        }
    }
}
  • 测试方法:在终端新开窗口运行:nc -lk 9999
  • 然后随便敲英文句子回车,Flink 控制台就会实时打印单词计数

5. 依赖管理(pom.xml 里通常长这样)

Flink 项目 pom.xml 核心部分:

XML

复制代码
<dependencies>
    <!-- 核心依赖(根据需要选一个或多个) -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- 如果要用 Table/SQL -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner_2.12</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- Kafka connector 示例 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka</artifactId>
        <version>3.2.0-2.2</version> <!-- 注意版本匹配 -->
    </dependency>
</dependencies>

6. 下一步推荐学什么

  • 从简单到复杂:先掌握 DataStream → map/filter/flatMap → keyBy + window/sum/reduce → ProcessFunction(带状态)
  • 连接真实数据源:Kafka(最常见)、文件、RabbitMQ、CDC 等
  • Table API / SQL:写 SQL 做流处理(超级方便)
  • 部署:打包成 fat-jar → ./bin/flink run -c com.example.StreamingJob your-job.jar

官方文档(强烈推荐):https://nightlies.apache.org/flink/flink-docs-stable/ 里面有 "Try Flink" → DataStream API 教程,Java 例子很全。

相关推荐
鱟鲥鳚7 分钟前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
-银雾鸢尾-15 分钟前
C#中的StringBuilder相关方法
开发语言·c#
大模型码小白1 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司2 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地3 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
段一凡-华北理工大学3 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe4 小时前
C++——多态
开发语言·c++
心平气和量大福大4 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
莫逸风6 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
从零开始的代码生活_6 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法