3、开发环境搭建:JDK、Maven、IDE配置、Flink本地集群启动、第一个WordCount程序运行验证
实时因子计算服务的开发环境是后续所有实验与生产代码的基础。本章将引导你完成从零搭建一套完整的 Flink 开发环境,包括 JDK、Maven、IDE 的安装与配置,Flink 本地集群的启动,并通过经典的 WordCount 程序验证环境是否正常工作。
3.1 环境依赖清单
在开始安装之前,请确认你的操作系统为 macOS / Linux / Windows (WSL2 推荐)。以下为本次课程使用的软件版本及其核心作用:
| 组件 | 推荐版本 | 核心作用 |
|---|---|---|
| JDK | 1.8.0_202 或 11 (LTS) | Flink 运行与编译的基础运行时环境 |
| Apache Maven | 3.6.3+ | 项目依赖管理与构建打包工具 |
| IntelliJ IDEA | 2023.x (Community/Ultimate) | 主开发 IDE,提供 Flink 插件与调试支持 |
| Apache Flink | 1.17.x (课程统一版本) | 实时计算引擎,本地 Standalone 集群模式 |
3.2 JDK 安装与配置
JDK 是 Flink 运行的基石。推荐使用 Oracle JDK 8u202 或 OpenJDK 11。安装完成后,务必配置 JAVA_HOME 环境变量并将 $JAVA_HOME/bin 加入 PATH。
验证安装:
# 查看 Java 版本
java -version
# 预期输出示例(JDK 8)
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
JAVA_HOME 指向正确的路径。Flink 1.17 对 JDK 9+ 的支持有限,建议优先使用 JDK 8。
3.3 Maven 安装与配置
Maven 用于管理项目依赖与构建生命周期。安装后需配置 MAVEN_HOME 并修改 settings.xml 中的镜像源以加速依赖下载。
推荐在 ~/.m2/settings.xml 中添加阿里云镜像:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
验证安装:
mvn -version
# 预期输出包含 Maven 版本与 Java 版本信息
Apache Maven 3.9.6
Maven home: /usr/local/apache-maven-3.9.6
Java version: 1.8.0_202, vendor: Oracle Corporation
3.4 IDE 配置与 Flink 插件
推荐使用 IntelliJ IDEA。安装完成后,需进行以下关键配置:
- 编码设置: 统一使用
UTF-8编码,避免中文乱码。 - Maven 集成: 在
Settings → Build, Execution, Deployment → Build Tools → Maven中指定本地 Maven 路径与settings.xml。 - Flink 插件: 安装
Flink插件(可选),用于快速生成 Flink 项目模板与运行配置。 - Lombok 插件: 如果项目中使用 Lombok 简化 POJO,请务必安装并启用
Annotation Processing。
idea64.exe.vmoptions 中适当增加 -Xms1024m -Xmx2048m,避免大型 Flink 项目编译时内存不足。
3.5 Flink 本地集群启动
Flink 提供 Standalone 模式用于本地开发与调试。下载 Flink 1.17 压缩包并解压后,执行以下命令启动集群:
# 进入 Flink 安装目录
cd flink-1.17.0
# 启动本地集群(默认使用 8081 端口)
./bin/start-cluster.sh
# 启动后检查进程
jps
# 应看到以下两个进程:
# 1) StandaloneSessionClusterEntrypoint (JobManager)
# 2) TaskManagerRunner (TaskManager)
启动成功后,打开浏览器访问 http://localhost:8081,你将看到 Flink Web Dashboard 界面,其中显示集群概览、可用 Task Slots 数量以及作业管理入口。
3.6 第一个 WordCount 程序运行验证
WordCount 是 Flink 的“Hello World”,用于验证开发环境与集群是否正常工作。我们将创建一个 Maven 项目,编写流式 WordCount 程序,并在本地集群上运行。
3.6.1 创建 Maven 项目
在 IDEA 中新建 Maven 项目,在 pom.xml 中添加 Flink 核心依赖:
<properties>
<flink.version>1.17.0</flink.version>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
provided 作用域,因为 Flink 集群自身已包含这些 jar 包,避免打包时重复引入导致冲突。
3.6.2 编写 WordCount 程序
创建一个 SocketWindowWordCount 类,从 socket 读取文本流,每 5 秒统计一次单词出现次数:
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.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class SocketWindowWordCount {
public static void main(String[] args) throws Exception {
// 1. 创建流执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 2. 从 socket 读取数据(本地端口 9999)
DataStream<String> text = env.socketTextStream("localhost", 9999, "\n");
// 3. 数据转换:切分单词,映射为 (word, 1)
DataStream<Tuple2<String, Integer>> wordCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
for (String word : value.split("\\s")) {
if (word.length() > 0) {
out.collect(new Tuple2<>(word, 1));
}
}
}
})
.keyBy(value -> value.f0)
.window(TumblingProcessingTimeWindows.of(Time.seconds(5)))
.sum(1);
// 4. 打印结果
wordCounts.print();
// 5. 执行作业
env.execute("Socket Window WordCount");
}
}
3.6.3 运行验证步骤
- 启动 Flink 本地集群: 确保
start-cluster.sh已执行,Web Dashboard 可访问。 - 启动 socket 数据源: 在终端执行
nc -lk 9999(Linux/macOS)或使用ncat(Windows)。 - 在 IDEA 中运行程序: 直接运行
main方法,Flink 会自动连接本地集群并提交作业。 - 输入数据: 在 nc 终端中输入单词,例如:
flink flink hadoop spark。 - 查看输出: 在 IDEA 控制台或 Flink Web Dashboard 的 Task Manager 日志中查看统计结果。
3.7 环境验证清单
完成上述步骤后,请对照下表逐项确认环境就绪:
| 检查项 | 验证方法 | 预期结果 |
|---|---|---|
| JDK 安装 | java -version |
显示 1.8.0_202 或 11 |
| Maven 安装 | mvn -version |
显示 3.6.3+ 且 Java 版本正确 |
| Flink 集群启动 | jps 或访问 localhost:8081 |
JobManager + TaskManager 进程存在,Dashboard 可访问 |
| WordCount 运行 | IDEA 运行程序,nc 输入数据 | 控制台每 5 秒输出单词统计结果 |
Run Configuration 中是否添加了 --hostname localhost --port 9999 参数(如果程序使用参数解析)。同时确认防火墙未阻断 9999 端口。