3. 开发环境搭建:JDK、Maven、Flink集群(Standalone模式)、IDE配置、第一个Flink WordCount程序
开发环境是实时计算实践的起点。本章将引导你从零搭建一套完整的 Flink 开发环境,涵盖 JDK、Maven、Flink Standalone 集群、IDE 配置,并运行第一个 WordCount 程序。完成本章后,你将拥有一个可随时启动的本地 Flink 实验环境。
3.1 环境依赖与版本选型
Flink 运行依赖 Java 环境,同时推荐使用 Maven 进行项目构建与依赖管理。以下为本次课程推荐的版本组合,已在生产级稳定性与功能完整性之间取得平衡。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| JDK | 1.8.0_202 或 11.0.x | Flink 1.14+ 支持 Java 11,推荐使用 Java 8 以获得最广泛的兼容性 |
| Maven | 3.6.3+ | 用于项目构建、依赖管理和打包 |
| Flink | 1.14.6 | 稳定版本,支持流批一体,社区活跃 |
| IDE | IntelliJ IDEA 2022.2+ | 社区版或 Ultimate 版均可,需安装 Scala 插件(可选) |
版本兼容性提示: 若使用 Flink 1.15+,建议搭配 JDK 11;若使用 Flink 1.13 及以下,请使用 JDK 8。本课程所有示例均基于 Flink 1.14.6 + JDK 8 验证。
3.2 JDK 安装与配置
JDK 是 Flink 运行的基础。请确保已正确安装并配置 JAVA_HOME 环境变量。
- 下载 JDK: 从 Oracle 或 Adoptium 下载 JDK 8(推荐
jdk-8u202-linux-x64.tar.gz或.msi安装包)。 - 解压安装: 将压缩包解压至
/usr/local/java/(Linux/Mac)或C:\Java\(Windows)。 - 配置环境变量:
# Linux / Mac ( ~/.bashrc 或 ~/.zshrc ) export JAVA_HOME=/usr/local/java/jdk1.8.0_202 export PATH=$JAVA_HOME/bin:$PATH # Windows ( 系统环境变量 ) JAVA_HOME = C:\Java\jdk1.8.0_202 PATH 追加 %JAVA_HOME%\bin - 验证安装:
java -version # 输出示例: # 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)
3.3 Maven 安装与配置
Maven 用于管理 Flink 项目的依赖和构建生命周期。推荐使用阿里云镜像加速国内下载。
- 下载 Maven: 从 Apache 官网下载
apache-maven-3.6.3-bin.tar.gz。 - 解压安装: 解压至
/usr/local/maven/或C:\Maven\。 - 配置环境变量:
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3 export PATH=$MAVEN_HOME/bin:$PATH - 配置阿里云镜像(可选但推荐): 编辑
~/.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 版本及操作系统信息
3.4 Flink Standalone 集群搭建
Standalone 模式是 Flink 最简单的部署方式,适合本地开发和测试。本课程采用单节点集群(1 JobManager + 1 TaskManager)。
- 下载 Flink: 从 Flink 官网 下载
flink-1.14.6-bin-scala_2.12.tar.gz。 - 解压:
tar -xzf flink-1.14.6-bin-scala_2.12.tar.gz -C /usr/local/ cd /usr/local/flink-1.14.6 - 配置 Flink: 编辑
conf/flink-conf.yaml,修改以下关键参数:# JobManager 地址(本机) jobmanager.rpc.address: localhost # JobManager 端口 jobmanager.rpc.port: 6123 # TaskManager 堆内存(根据机器配置调整) taskmanager.memory.process.size: 2048m # 每个 TaskManager 的 Task Slot 数 taskmanager.numberOfTaskSlots: 4 # 并行度(默认) parallelism.default: 2 - 启动集群:
# 启动 JobManager ./bin/start-cluster.sh # 验证进程 jps # 应看到 StandaloneSessionClusterEntrypoint (JobManager) 和 TaskManagerRunner (TaskManager) - 访问 Web UI: 打开浏览器访问
http://localhost:8081,确认集群状态为 Running。
集群验证: 在 Web UI 的 "Task Managers" 页面应看到 1 个 TaskManager,且 Slot 数为 4。在 "Job Manager" 页面可查看配置参数和日志。
3.5 IDE 配置与项目创建
推荐使用 IntelliJ IDEA 进行 Flink 开发。以下为项目创建与配置步骤。
- 创建 Maven 项目: 在 IDEA 中选择
File → New → Project → Maven,填写 GroupId(如com.flink.practice)和 ArtifactId(如flink-wordcount)。 - 添加 Flink 依赖: 编辑
pom.xml,添加以下核心依赖:<properties> <flink.version>1.14.6</flink.version> <scala.binary.version>2.12</scala.binary.version> </properties> <dependencies> <!-- Flink Java 客户端 --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> </dependency> <!-- Flink Streaming 客户端 --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <!-- Flink CLI(本地运行) --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> </dependencies> - 配置 Maven 编译插件: 在
pom.xml的<build>中添加:<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> - 导入依赖: 点击 IDEA 右侧 Maven 面板的
Reload All Projects,等待依赖下载完成。
3.6 第一个 Flink 程序:WordCount
WordCount 是 Flink 的 "Hello World",用于验证环境是否正常工作。以下为完整的 Java 实现。
package com.flink.practice;
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 WordCount {
public static void main(String[] args) throws Exception {
// 1. 创建流执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 2. 数据源:从 socket 读取文本流(需先启动 nc -lk 9999)
DataStream<String> text = env.socketTextStream("localhost", 9999);
// 3. 转换:分词、计数
DataStream<Tuple2<String, Integer>> counts = text
.flatMap(new Tokenizer())
.keyBy(value -> value.f0)
.sum(1);
// 4. 输出:打印到控制台
counts.print();
// 5. 执行
env.execute("Flink WordCount");
}
// 自定义 FlatMapFunction:将每行文本拆分为单词
public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// 按空格分词
String[] words = value.toLowerCase().split("\\W+");
for (String word : words) {
if (word.length() > 0) {
out.collect(new Tuple2<>(word, 1));
}
}
}
}
}
运行前注意: 该程序从 socket 读取数据,需先启动一个数据发送端。在终端执行
nc -lk 9999(Linux/Mac)或使用 ncat -lk 9999(Windows)。然后在 IDEA 中运行 WordCount.main(),在 nc 终端输入单词,即可在 IDEA 控制台看到实时计数结果。
3.7 环境搭建与运行流程总览
以下 SVG 图展示了从环境搭建到程序运行的完整链路,帮助你理解各组件之间的协作关系。
3.8 常见问题与避坑指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
java.lang.NoClassDefFoundError |
Flink 依赖未正确导入或版本冲突 | 检查 pom.xml 中 flink.version 和 scala.binary.version 是否匹配;执行 mvn clean install 重新下载依赖 |
Web UI 无法访问 localhost:8081 |
JobManager 未启动或端口被占用 | 执行 jps 确认进程存在;检查 flink-conf.yaml 中 jobmanager.rpc.port 配置;尝试 ./bin/stop-cluster.sh 后重新启动 |
| WordCount 运行后无输出 | nc 未启动或端口不一致 | 确认 nc -lk 9999 已运行;检查程序中的端口号是否与 nc 一致;在 nc 终端输入文本后按回车 |
| TaskManager 启动失败 | 内存不足或配置错误 | 检查 taskmanager.memory.process.size 是否超过可用内存;查看 log/flink-*-taskmanager-*.log 获取详细错误 |
3.9 环境验证清单
完成以上步骤后,请逐项核对以下清单,确保环境就绪。
- JDK:
java -version输出正确版本,JAVA_HOME已设置。 - Maven:
mvn -version输出正常,阿里云镜像生效(可选)。 - Flink 集群:
jps显示 JobManager 和 TaskManager 进程;Web UI 可访问且状态为 Running。 - IDE 项目: Maven 依赖无红色报错,
WordCount.java无编译错误。 - 程序运行: 启动 nc 后运行 WordCount,输入单词可在控制台看到
(word,count)格式的输出。
进阶提示: 若希望 WordCount 程序在 Flink 集群上提交运行(而非 IDE 内直接执行),可使用以下命令:
此时需确保
./bin/flink run -c com.flink.practice.WordCount /path/to/flink-wordcount-1.0-SNAPSHOT.jar此时需确保
nc -lk 9999 已启动,且集群正常运行。