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调试更友好 |
2.2 JDK安装与配置
我个人习惯用JDK 8,虽然老,但稳。Flink官方对JDK 8的支持也是最到位的。
安装步骤:
- 从Oracle官网或AdoptOpenJDK下载JDK 8u202
- 解压到
/usr/local/java/或C:\Java\ - 配置环境变量
# 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"
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"
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
2.7 知识体系总览
下面这张图,把咱们这一章的核心内容串起来了。你可以把它当作一个检查清单,看看自己有没有遗漏。
2.8 快速验证:你的环境跑通了吗?
环境搭完,咱们得验证一下。写个最简单的Flink程序,从Kafka读一条消息再打印出来。
验证步骤:
- 启动Kafka:
docker-compose up -d - 创建测试Topic:
docker exec kafka kafka-topics --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 - 启动Flink集群:
./bin/start-cluster.sh - 在IDE中运行一个简单的Flink Kafka Consumer程序
如果控制台能打印出Kafka里的消息,恭喜你,环境搭建成功!
KAFKA_ADVERTISED_LISTENERS 是不是配成了 PLAINTEXT://localhost:9092。我遇到过太多次这个问题了,十有八九都是它。