2. 环境搭建:Flink本地开发环境安装与第一个WordCount程序
本章是进入Flink流处理实战的第一步。我们将完成从零搭建本地开发环境,包括JDK、Maven、Flink的安装与配置,IntelliJ IDEA的工程设置,并运行经典的WordCount程序验证环境正确性。一个稳定、一致的环境是后续量化回测坏账率哨兵系统开发的基础。
2.1 环境依赖与版本对照
为避免版本冲突,建议严格按照下表组合安装。本课程基于Flink 1.17.x稳定版,JDK采用Java 8(1.8)或Java 11,Maven使用3.8+。
| 组件 | 推荐版本 | 最低版本 | 说明 |
|---|---|---|---|
| JDK | 1.8.0_202 / 11.0.18 | 1.8 | Flink 1.17 官方推荐 Java 11,Java 8 仍兼容 |
| Maven | 3.8.6 | 3.6.0 | 用于项目构建与依赖管理 |
| Flink | 1.17.2 | 1.14.0 | 本地模式运行,无需Hadoop |
| IntelliJ IDEA | 2023.2+ (Ultimate/Community) | 2021.3 | Community版免费,功能足够 |
版本选择建议: 量化回测场景通常需要长时间稳定运行,建议选择Flink的LTS(长期支持)版本。1.17.x是目前生产环境验证最充分的稳定分支之一。
2.2 安装步骤详解
2.2.1 JDK安装与配置
- 下载JDK: 从Oracle或Adoptium(推荐)下载JDK 8或11的安装包。
- 安装: 默认路径安装,Windows建议安装在
C:\Java\jdk1.8.0_202,macOS/Linux通常解压到/usr/local/java/。 - 配置环境变量:
JAVA_HOME:指向JDK安装根目录。PATH:追加%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(Linux/macOS)。
- 验证: 终端执行
java -version,输出应显示版本号且无错误。
2.2.2 Maven安装与配置
- 下载: 从Apache Maven官网下载二进制zip/tar.gz包。
- 解压: 解压到无中文、无空格的目录,如
C:\maven\apache-maven-3.8.6。 - 配置环境变量:
MAVEN_HOME:指向Maven解压目录。PATH:追加%MAVEN_HOME%\bin。
- 配置阿里云镜像(国内加速): 修改
conf/settings.xml,在<mirrors>内添加:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
- 验证: 执行
mvn -version,确认Maven版本及Java Home路径正确。
2.2.3 Flink本地模式安装
- 下载: 从Flink官网下载
flink-1.17.2-bin-scala_2.12.tgz。 - 解压: 解压到本地目录,如
C:\flink\flink-1.17.2。 - 启动集群: 进入
bin目录,执行start-cluster.bat(Windows)或./start-cluster.sh(Linux/macOS)。 - 验证: 浏览器访问
http://localhost:8081,应看到Flink Web Dashboard界面,显示JobManager和TaskManager状态。
常见问题: 如果Flink Web UI无法访问,请检查防火墙是否拦截8081端口,或终端是否有Java进程残留。执行
jps 命令应看到 StandaloneSessionClusterEntrypoint 和 TaskManagerRunner 两个进程。
2.3 IDE配置与项目创建
2.3.1 IntelliJ IDEA配置
- 安装插件: 确保已安装 Maven 和 Scala 插件(Flink DataStream API常用Java,但部分场景需Scala支持)。
- 配置JDK:
File → Project Structure → SDKs,添加已安装的JDK 1.8或11。 - 配置Maven:
File → Settings → Build, Execution, Deployment → Build Tools → Maven,设置Maven home path为本地Maven目录,勾选Always update snapshots。
2.3.2 创建Flink Maven项目
- 新建项目:
File → New → Project → Maven,勾选Create from archetype。 - 添加Archetype: 点击
Add Archetype,输入:- GroupId:
org.apache.flink - ArtifactId:
flink-quickstart-java - Version:
1.17.2
- GroupId:
- 填写项目坐标: GroupId:
com.quant.risk,ArtifactId:flink-sentinel。 - 等待依赖下载: IDEA自动解析pom.xml,下载Flink核心依赖(flink-java、flink-streaming-java等)。
项目结构说明: 创建完成后,src/main/java下自动生成
DataStreamJob.java 和 BatchJob.java 两个示例类。DataStreamJob是流处理入口,BatchJob是批处理入口。本课程主要基于DataStream API。
2.4 第一个Flink WordCount程序
WordCount是Flink的“Hello World”,用于验证环境是否完整可用。下面实现一个从TCP socket读取文本流、实时统计单词出现次数的程序。
2.4.1 程序代码
package com.quant.risk;
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 SocketWindowWordCount {
public static void main(String[] args) throws Exception {
// 1. 创建流处理执行环境
final 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)
.sum(1);
// 4. 打印结果到控制台
wordCounts.print();
// 5. 执行任务
env.execute("Socket Window WordCount");
}
}
2.4.2 运行步骤
- 启动socket数据源: 在终端执行
nc -lk 9999(Linux/macOS)或使用ncat -lk 9999(Windows需安装Ncat)。 - 运行Flink程序: 在IDEA中右键
SocketWindowWordCount→Run。 - 输入数据: 在nc终端输入单词,如
flink flink wordcount,观察IDEA控制台输出。 - 预期输出: 类似
(flink,1) (flink,2) (wordcount,1),每输入一行即触发增量统计。
验证要点: 如果控制台打印出
Connected to JobManager 并持续输出统计结果,说明JDK、Maven、Flink环境全部配置正确。这是后续量化回测流处理管道的基础骨架。
2.5 环境架构总览
下图展示了本地开发环境中各组件的关系:IDEA作为开发IDE,通过Maven管理Flink依赖;Flink以Standalone模式运行在本地JVM中;WordCount程序从外部socket读取数据,经过Flink DataStream处理,最终输出到控制台。
2.6 环境验证清单
完成上述步骤后,使用下表逐项确认环境就绪,避免后续开发中出现“环境问题”导致的排查困难。
| 检查项 | 验证命令/操作 | 预期结果 |
|---|---|---|
| JDK | java -version |
显示 1.8 或 11 版本号 |
| Maven | mvn -version |
显示 3.8+ 版本及Java Home |
| Flink Web UI | 浏览器访问 localhost:8081 |
显示Dashboard,TaskManager可用 |
| IDEA项目 | Maven面板无红色波浪线 | 依赖全部下载成功 |
| WordCount运行 | 输入单词后控制台输出 | 实时打印 (word, count) 元组 |