2. 环境准备:JDK、Maven、IDE、Docker、Kafka与Flink集群搭建

说实话,搞实时计算最怕什么?不是业务逻辑复杂,而是环境还没搭好,热情先凉了半截。我见过太多新手在环境配置上卡一整天,最后连个Hello World都没跑起来。

这一章,咱们就把这些基础工具一次性搞定。我会把每个工具的版本、配置要点、以及我踩过的坑都交代清楚。你跟着一步步来,半小时内就能看到一个能跑起来的Flink+Kafka集群。

2.1 版本选型:别在版本上翻车

版本选型这事,我吃过不少亏。有一次生产环境升级,就因为Kafka客户端版本和Broker版本不匹配,折腾了一整晚。所以咱们一开始就定好版本,后面省心。

组件 推荐版本 说明
JDK 1.8.0_202 或 11.0.x Flink 1.14+ 支持Java 11,但生产上Java 8依然主流
Maven 3.6.3 或 3.8.x 3.6.3最稳,3.8.x对依赖解析更严格
Docker 20.10.x + Docker Compose 1.29.x 用于快速拉起Kafka和Flink集群
Kafka 2.8.1 或 3.2.0 2.8.1去掉了ZooKeeper依赖,但咱们课程用2.8.1
Flink 1.14.6 或 1.15.2 1.14.6最成熟,1.15.2有更多新特性
IDE IntelliJ IDEA 2022.x 社区版够用,但Ultimate版对Flink调试更友好
⚠️ 版本兼容性警告: Flink 1.14 搭配 Kafka 2.8.x 时,必须使用 flink-connector-kafka_2.12:1.14.6。别用错版本,否则启动时会报 ClassNotFoundException。

2.2 JDK安装与配置

我个人习惯用JDK 8,虽然老,但稳。Flink官方对JDK 8的支持也是最到位的。

安装步骤:

  1. 从Oracle官网或AdoptOpenJDK下载JDK 8u202
  2. 解压到 /usr/local/java/ 或 C:\Java\
  3. 配置环境变量
# Linux/Mac
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# Windows (在系统变量中设置)
JAVA_HOME=C:\Java\jdk1.8.0_202
PATH=%JAVA_HOME%\bin;%PATH%

验证一下:

java -version
# 输出应该类似:java version "1.8.0_202"
💡 我的经验: 别用JDK 8u201之后的版本,有些Flink老版本的序列化会有兼容问题。我去年帮一个团队排查问题,最后发现就是JDK小版本导致的。

2.3 Maven配置与加速

Maven这东西,说白了就是个依赖管家。但国内用Maven,不配镜像源的话,下载依赖能等到你怀疑人生。

配置阿里云镜像:

编辑 ~/.m2/settings.xml,加入以下内容:

<mirrors>
  <mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>

你想想看,如果不配这个,一个Flink项目光依赖就得下半小时。配完之后,3分钟搞定。

2.4 IDE:IntelliJ IDEA配置要点

IDE这块,我强烈推荐IntelliJ IDEA。Eclipse虽然也能用,但Flink项目的调试体验差不少。

必装插件:

  • Scala插件 — 如果你用Scala API写Flink
  • Maven Helper — 分析依赖冲突的神器
  • Rainbow Brackets — 括号多的时候,这插件能救命

JVM参数调优:

在IDEA的 Help -> Edit Custom VM Options 中,我建议这样配:

-Xms1024m
-Xmx4096m
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC

为什么要调大?因为Flink项目在本地调试时,TaskManager会启动多个线程,内存小了直接OOM。我曾经在调试一个窗口聚合任务时,IDEA直接卡死,后来发现是默认内存不够。

2.5 Docker环境:一键拉起Kafka

嗯,这里要注意。Docker是咱们快速搭建环境的核心工具。你不需要手动安装ZooKeeper和Kafka,一个docker-compose文件全搞定。

docker-compose.yml:

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.0.1
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - "2181:2181"

  kafka:
    image: confluentinc/cp-kafka:7.0.1
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

启动命令:

docker-compose up -d
# 验证Kafka是否启动成功
docker logs kafka | grep "started"
🎯 关键点: KAFKA_ADVERTISED_LISTENERS 必须设置为 localhost:9092,否则你的Flink程序连不上Kafka。我见过太多人栽在这个配置上。

2.6 Flink集群搭建:本地模式与Standalone模式

Flink的部署模式有好几种,咱们课程先用Standalone模式。为什么?因为简单,而且能让你直观理解Flink的架构。

下载与启动:

# 下载Flink 1.14.6
wget https://archive.apache.org/dist/flink/flink-1.14.6/flink-1.14.6-bin-scala_2.12.tgz
tar -xzf flink-1.14.6-bin-scala_2.12.tgz
cd flink-1.14.6

# 启动集群
./bin/start-cluster.sh

# 验证
jps
# 应该看到:StandaloneSessionClusterEntrypoint 和 TaskManagerRunner

访问 http://localhost:8081,你会看到Flink的Web UI。如果看不到,检查一下防火墙或者端口占用。

配置调整:

编辑 conf/flink-conf.yaml,我建议至少改这几个参数:

# 任务管理器内存
taskmanager.memory.process.size: 2048m
# 并行度
parallelism.default: 2
# 检查点间隔
execution.checkpointing.interval: 30s
⚠️ 注意: 如果你在本地跑Flink,别把并行度设得太大。我见过有人设成8,结果笔记本风扇直接起飞。本地调试用2就够。

2.7 知识体系总览

下面这张图,把咱们这一章的核心内容串起来了。你可以把它当作一个检查清单,看看自己有没有遗漏。

环境准备知识体系 Flink + Kafka 集成环境 JDK 8/11 Maven 3.6+ IntelliJ IDEA Docker JAVA_HOME配置 阿里云镜像加速 Flink插件 + JVM调优 docker-compose.yml 可运行的 Flink + Kafka 集群 💡 核心思路:用Docker快速拉起Kafka,用Standalone模式部署Flink 本地IDE负责开发调试,三者通过localhost网络互通

2.8 快速验证:你的环境跑通了吗?

环境搭完,咱们得验证一下。写个最简单的Flink程序,从Kafka读一条消息再打印出来。

验证步骤:

  1. 启动Kafka:docker-compose up -d
  2. 创建测试Topic:docker exec kafka kafka-topics --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
  3. 启动Flink集群:./bin/start-cluster.sh
  4. 在IDE中运行一个简单的Flink Kafka Consumer程序

如果控制台能打印出Kafka里的消息,恭喜你,环境搭建成功!

🔧 排坑小贴士: 如果Flink连不上Kafka,先检查 KAFKA_ADVERTISED_LISTENERS 是不是配成了 PLAINTEXT://localhost:9092。我遇到过太多次这个问题了,十有八九都是它。