3. 环境搭建:Linux基础环境配置、Docker与Docker Compose安装、Flink Standalone集群搭建
说实话,做实时计算这么多年,我见过太多人在环境搭建这一步就卡住了。不是装不上,就是版本冲突,折腾半天还没开始写代码。这一章,咱们就把这些坑提前填上。
我会带你一步步搭好三样东西:Linux基础环境、Docker与Docker Compose、Flink Standalone集群。这三样是后续所有实验的底座,底座稳了,后面才跑得快。
本章目标:完成搭建后,你手上会有一个可运行的 Flink 单机集群,能提交任务、能看到 Web UI。整个过程大约需要 30 分钟。
3.1 Linux 基础环境配置
我习惯用 Ubuntu 20.04 LTS 作为演示系统。你如果是 CentOS 或别的发行版,命令稍微改改就行,核心逻辑一样。
3.1.1 更新系统与安装常用工具
拿到一台新机器,第一件事就是更新包管理器。别跳过这步,我遇到过好几次因为源太旧导致装软件报错的情况。
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim git net-tools
这些工具里,curl 和 wget 后面下载 Flink 包要用,vim 是改配置文件的,git 用来拉代码,net-tools 提供 ifconfig 方便看 IP。
3.1.2 配置主机名与 hosts
集群环境里,主机名解析很重要。我曾经因为忘记配 hosts,导致 Flink 节点之间互相找不到,排查了半天。
sudo hostnamectl set-hostname flink-node1
echo "127.0.0.1 localhost" | sudo tee /etc/hosts
echo "192.168.1.100 flink-node1" | sudo tee -a /etc/hosts
把 192.168.1.100 换成你机器的实际 IP。后面搭建集群时,节点之间就是靠这个主机名通信的。
3.1.3 安装 Java(JDK 8 或 11)
Flink 依赖 Java 运行环境。我个人推荐 JDK 8,兼容性最好。如果你用 Flink 1.14 以上版本,JDK 11 也完全没问题。
sudo apt install -y openjdk-8-jdk
java -version
看到类似 openjdk version "1.8.0_xxx" 的输出,就说明装好了。然后设置 JAVA_HOME 环境变量:
echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" | sudo tee -a /etc/profile
echo "export PATH=\$JAVA_HOME/bin:\$PATH" | sudo tee -a /etc/profile
source /etc/profile
小技巧:如果你机器上装了多个 Java 版本,可以用 sudo update-alternatives --config java 切换默认版本。我一般把 JDK 8 设为默认,因为大部分大数据组件对它的支持最稳定。
3.2 Docker 与 Docker Compose 安装
为什么要在 Flink 集群之外先装 Docker?因为后面很多依赖服务(比如 Kafka、Redis、MySQL)我都会用容器跑。这样你的宿主机干干净净,不会装一堆乱七八糟的东西。
3.2.1 安装 Docker Engine
Docker 的安装方式有好几种,我推荐用官方脚本,最省事:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
装完之后,把当前用户加到 docker 组里,这样就不用每次敲 sudo 了:
sudo usermod -aG docker $USER
newgrp docker
验证一下:
docker --version
docker run hello-world
看到 "Hello from Docker!" 就说明安装成功。嗯,这一步基本不会出问题,除非你的网络连不上 Docker Hub。
注意:如果你在国内,拉取 Docker 镜像可能会很慢。建议配置国内镜像加速器,比如阿里云、中科大源。具体配置方式在 Docker 官方文档里有,这里不展开了。
3.2.2 安装 Docker Compose
Docker Compose 是用来定义和运行多容器应用的工具。后面我们会用它一键启动 Kafka + Zookeeper,非常方便。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/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 v2 已经集成到 Docker CLI 里了,你也可以直接用 docker compose(注意没有横杠)命令。
3.3 Flink Standalone 集群搭建
终于到主角了。Flink 有三种部署模式:Standalone、YARN、Kubernetes。咱们从最简单的 Standalone 开始,它不依赖任何资源管理器,最适合学习和开发测试。
3.3.1 下载与解压 Flink
我习惯把软件统一放在 /opt 目录下:
cd /opt
sudo wget https://archive.apache.org/dist/flink/flink-1.14.6/flink-1.14.6-bin-scala_2.12.tgz
sudo tar -xzf flink-1.14.6-bin-scala_2.12.tgz
sudo mv flink-1.14.6 flink
sudo chown -R $USER:$USER /opt/flink
这里我选了 Flink 1.14.6,这个版本稳定且功能完整。你如果要用更新的版本,去官网看 release notes 确认兼容性。
3.3.2 配置 Flink
主要改两个配置文件:flink-conf.yaml 和 workers(旧版叫 slaves)。
第一步:修改 flink-conf.yaml
vim /opt/flink/conf/flink-conf.yaml
找到并修改以下关键项:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
jobmanager.rpc.address |
你的主机 IP | JobManager 的通信地址 |
taskmanager.numberOfTaskSlots |
4 | 每个 TaskManager 的并行度 |
parallelism.default |
2 | 作业默认并行度 |
jobmanager.memory.process.size |
2048m | JobManager 进程内存 |
taskmanager.memory.process.size |
4096m | TaskManager 进程内存 |
第二步:配置 workers 文件
echo "localhost" > /opt/flink/conf/workers
单机模式就写 localhost。如果是多节点集群,这里写各节点的主机名,一行一个。
3.3.3 启动 Flink 集群
配置好了,启动试试:
/opt/flink/bin/start-cluster.sh
看到类似下面的输出,说明启动成功:
Starting cluster.
Starting standalonesession daemon on host flink-node1.
Starting taskexecutor daemon on host flink-node1.
用 jps 命令检查进程:
jps
应该能看到 StandaloneSessionClusterEntrypoint(JobManager)和 TaskManagerRunner(TaskManager)两个进程。
3.3.4 验证集群状态
打开浏览器,访问 http://你的IP:8081,就能看到 Flink Web UI 了。
在 UI 上你可以看到:
- TaskManagers 的数量和状态
- 每个 TaskManager 的 Slot 使用情况
- 已提交的作业列表
我一般还会跑一个简单的测试任务,确认集群能正常工作:
/opt/flink/bin/flink run /opt/flink/examples/batch/WordCount.jar
看到控制台输出单词计数结果,就说明一切正常。
避坑指南:如果你启动后访问不了 Web UI,先检查防火墙。用 sudo ufw status 看看 8081 端口是否开放。我曾经在云服务器上折腾了半天,最后发现是安全组没配。
3.4 本章知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以看到,Linux 环境是地基,Docker 是工具层,Flink 集群是最终要跑的应用层。
3.5 常见问题与排查
环境搭建过程中,我遇到过不少问题。挑几个典型的说说:
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| Flink 启动报 "Cannot allocate memory" | 虚拟机内存不足 | 调小 taskmanager.memory.process.size 到 1024m |
| Web UI 打不开 | 防火墙或安全组未放行 8081 端口 | sudo ufw allow 8081 或云控制台加规则 |
| Docker 拉取镜像超时 | 网络问题或镜像源太慢 | 配置国内镜像加速器 |
jps 看不到 TaskManager |
workers 文件配置错误 | 检查 /opt/flink/conf/workers 内容 |
重要提醒:如果你是在云服务器上搭建,记得在安全组/防火墙里开放 8081 端口。另外,Flink 默认的 Web UI 没有认证,生产环境一定要加鉴权或放到内网。
好了,环境搭好了,集群也跑起来了。后面我们就可以开始往上面提交真正的实时计算任务了。记住,这个环境会贯穿整个课程,保护好它。