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章 环境搭建知识体系 Linux 基础环境 系统更新 主机名配置 JDK 8 安装 网络工具 Docker 与 Docker Compose Docker Engine 镜像加速 Docker Compose Flink Standalone 集群 下载解压 配置 flink-conf.yaml 启动集群 Web UI 验证 (端口 8081) 💡 三层架构:底层系统 → 容器工具 → 实时计算引擎,层层依赖,缺一不可

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 没有认证,生产环境一定要加鉴权或放到内网。

好了,环境搭好了,集群也跑起来了。后面我们就可以开始往上面提交真正的实时计算任务了。记住,这个环境会贯穿整个课程,保护好它。