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 例子很全。

相关推荐
木辰風5 小时前
PLSQL自定义自动替换(AutoReplace)
java·数据库·sql
2501_944525545 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
heartbeat..5 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
6 小时前
java关于内部类
java·开发语言
好好沉淀6 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin6 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder6 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
lsx2024066 小时前
FastAPI 交互式 API 文档
开发语言
吨~吨~吨~6 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea
你才是臭弟弟6 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端