环境准备:Docker、JDK、Maven、IDE 的安装与配置
说实话,很多初学者一上来就急着写代码,结果环境配了三天还没跑起来。我见过太多人卡在这一步了。咱们这节课就把这些基础工具一次性搞定,后面写代码的时候你只管专注业务逻辑,不用再被环境问题折腾。
实时特征平台依赖的东西其实不多,但每一样都得配对。我按自己的习惯,把安装顺序排了一下:先装 JDK,再装 Maven,然后是 Docker,最后是 IDE。这个顺序是有讲究的——后面的工具往往依赖前面的。
核心要点:本章所有工具都建议使用 LTS(长期支持)版本。别追新,稳定第一。生产环境踩过的坑告诉我,追新版本往往得不偿失。
1. JDK 安装与配置
实时特征平台的核心计算引擎是 Flink,而 Flink 依赖 JDK 8 或 11。我个人推荐 JDK 11,原因很简单:JDK 8 太老了,很多新特性不支持;JDK 17 虽然好,但 Flink 的生态还没完全跟上。
安装步骤其实就三步:
- 下载 JDK 11 — 去
Adoptium(原 AdoptOpenJDK)官网下载,别去 Oracle 官网,那个要登录。 - 解压安装 — Linux/Mac 解压到
/usr/local/java,Windows 解压到C:\Java。 - 配置环境变量 — 设置
JAVA_HOME和PATH。
嗯,这里要注意一个坑:JAVA_HOME 的路径不要带空格,尤其是 Windows 用户,别装在 Program Files 目录下。我曾经帮一个同事排查了半天,最后发现是路径里有空格导致 Maven 编译失败。
配置完成后,打开终端验证一下:
java -version
# 输出示例:
# openjdk version "11.0.18" 2023-01-17
# OpenJDK Runtime Environment (build 11.0.18+10)
# OpenJDK 64-Bit Server VM (build 11.0.18+10, mixed mode)
看到这个输出,说明 JDK 装好了。如果提示 command not found,别慌,检查一下 PATH 里有没有加上 $JAVA_HOME/bin。
2. Maven 安装与配置
Maven 是 Java 项目的构建工具,说白了就是帮你管理依赖、打包编译的。实时特征平台项目依赖很多第三方库,用手动下载 jar 包的方式会累死你。
安装 Maven 也很简单:
- 去 Apache Maven 官网下载二进制包(
apache-maven-3.9.x-bin.tar.gz或.zip)。 - 解压到
/usr/local/maven或C:\Maven。 - 配置
MAVEN_HOME和PATH。
验证方式:
mvn -version
# 输出示例:
# Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
# Maven home: /usr/local/maven
# Java version: 11.0.18, vendor: Eclipse Adoptium, runtime: /usr/local/java/jdk-11.0.18
这里有个小技巧:Maven 默认的镜像仓库在国外,下载依赖很慢。我建议你修改 ~/.m2/settings.xml,加上阿里云镜像:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
改完之后,你会发现下载速度从几分钟变成了几秒钟。这个配置我几乎每个项目都会用,省了不少时间。
3. Docker 安装与配置
Docker 是实时特征平台的关键基础设施。我们会用它来部署 Kafka、Redis、MySQL 这些中间件。你想想看,如果没有 Docker,你得手动安装配置每一个组件,光 Kafka 的配置就能折腾一上午。
安装方式根据操作系统不同略有区别:
| 操作系统 | 安装方式 | 注意事项 |
|---|---|---|
| macOS | 下载 Docker Desktop for Mac | 建议分配 4GB 以上内存 |
| Windows | 下载 Docker Desktop for Windows | 必须开启 WSL2 或 Hyper-V |
| Linux (Ubuntu) | apt install docker.io |
安装后执行 sudo usermod -aG docker $USER |
| Linux (CentOS) | yum install docker-ce |
需要先添加 Docker 官方仓库 |
安装完成后,验证一下:
docker --version
# Docker version 24.0.5, build ced0996
docker run hello-world
# 看到 "Hello from Docker!" 说明安装成功
避坑指南:我曾经在 Windows 上装 Docker Desktop 时,忘了开启 WSL2,结果 Docker 启动后一直报错。如果你用的是 Windows,记得先去「控制面板 → 启用或关闭 Windows 功能」里勾选「适用于 Linux 的 Windows 子系统」,然后安装 WSL2 内核更新包。
Docker 装好后,建议再装一个 docker-compose。我们会用它来一键启动多个容器。安装方式很简单:
# Linux/Mac
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version
# Docker Compose version v2.20.2
4. IDE 选择与配置
IDE 这块,我推荐 IntelliJ IDEA。Eclipse 虽然也能用,但说实话,IDEA 的智能提示和调试体验好太多了。实时特征平台的代码量不小,一个好用的 IDE 能帮你省下大量时间。
安装步骤:
- 去 JetBrains 官网下载 IntelliJ IDEA Community Edition(免费版就够用)。
- 安装完成后,打开 IDEA,安装几个必备插件:
- Lombok — 减少样板代码
- Rainbow Brackets — 括号颜色区分,调试时很有用
- GitToolBox — Git 状态一目了然
- 配置 JDK:
File → Project Structure → SDK → Add JDK,选择你刚才安装的 JDK 11 路径。
这里有个小建议:IDEA 默认的 JVM 内存只有 512MB,对于 Flink 项目来说不太够。你可以修改 Help → Edit Custom VM Options,把 -Xmx 改成 2048m:
-Xms512m
-Xmx2048m
-XX:ReservedCodeCacheSize=512m
改完之后重启 IDEA,你会发现编译和索引速度快了不少。
5. 整体环境验证
所有工具装好后,我们来做一个快速验证。写一个简单的 Java 项目,确保整个链路是通的:
// 创建一个 Maven 项目,在 pom.xml 中添加:
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.17.0</version>
</dependency>
</dependencies>
// 写一个简单的 Flink 程序
public class EnvironmentCheck {
public static void main(String[] args) {
System.out.println("JDK: " + System.getProperty("java.version"));
System.out.println("Maven: 已配置");
System.out.println("Docker: 已安装");
System.out.println("环境准备完成!");
}
}
用 Maven 编译:mvn clean package,然后用 IDEA 运行。如果一切顺利,你会看到控制台输出环境信息。
小提示:如果编译时出现 Unsupported class file major version 错误,说明 JDK 版本和 Maven 编译器插件版本不匹配。在 pom.xml 里显式指定 maven-compiler-plugin 的 source 和 target 为 11 即可解决。
6. 知识体系总览
下面这张图把本章涉及的工具和它们之间的关系梳理了一下。你可以把它当作一个检查清单,每装完一个就对照着看看:
这张图里,JDK 是基础,Maven 管依赖,Docker 管中间件,IDEA 管开发。四者缺一不可。你装完一个就打个勾,全部完成后用 mvn clean package 做一次整体验证,确保链路通畅。