Apache Flink 是一个分布式流处理框架,广泛用于实时数据计算场景。在生产环境中,Flink 支持多种部署模式,本文详细介绍 Local、Standalone、YARN 三种主流部署方式,帮助你根据实际需求选择合适的部署方案。

Flink 支持三种主要的安装模式,每种模式适用于不同的场景:

模式特点适用场景
Local(本地)单机运行,开箱即用开发调试、学习
StandaloneFlink 自带集群管理中小规模生产环境
YARN基于 Hadoop YARN 资源管理大规模生产环境

1. Local 本地模式

Local 模式是 Flink 最简单的运行方式,无需额外配置,适合快速入门和开发调试。

主要特点:

  • 无需额外配置,开箱即用
  • 在单个 JVM 进程中运行
  • 支持本地 IDE 调试
  • 适合学习 Flink 基础功能

适用场景:

  • 本地开发测试
  • 小规模数据验证
  • 学习 Flink API

启动方式:

cd /opt/servers/flink-1.11.1/bin
./start-local.sh

2. Standalone 独立模式

Standalone 模式是 Flink 自带的集群管理方式,不依赖外部资源管理器,适合中小规模生产环境。

主要特点:

  • Flink 自身提供集群管理
  • 包含 JobManager 和 TaskManager
  • 需要手动部署和配置
  • 资源分配由 Flink 完成

优点:

  • 简洁易用,不需要额外资源管理系统
  • 独立性强,不依赖外部系统
  • 低延迟,不涉及外部资源调度

缺点:

  • 不支持动态资源扩展
  • 大规模集群管理复杂
  • 缺乏自动化资源分配

3. YARN 模式

YARN 模式基于 Hadoop YARN 进行资源管理,适合大规模生产环境。

主要特点:

  • 资源由 YARN 统一调度
  • 支持动态资源分配
  • 可与其他 YARN 应用共存

运行模式:

  • Session 模式:创建长期运行的集群,多个作业共享资源
  • Per-Job 模式:每个作业独立分配资源,作业完成后释放

优点:

  • 资源利用率高
  • 与 Hadoop 生态无缝集成
  • 支持动态扩缩容

集群规划

本文示例使用三台机器进行部署:

主机名配置角色
h121.wzk.icu2C4GJobManager + TaskManager
h122.wzk.icu2C4GTaskManager
h123.wzk.icu2C2GTaskManager

环境准备

Java 环境配置

确保所有节点已配置 JAVA_HOME:

echo $JAVA_HOME
# 输出示例:/usr/local/java/jdk1.8.0_301

SSH 无密码登录

配置三台机器之间的 SSH 无密码登录:

# 在 h121 节点执行
ssh-keygen -t rsa
ssh-copy-id h121.wzk.icu
ssh-copy-id h122.wzk.icu
ssh-copy-id h123.wzk.icu

下载与安装

选择稳定版本 Flink 1.11.1:

cd /opt/software/
wget https://archive.apache.org/dist/flink/flink-1.11.1/flink-1.11.1-bin-scala_2.12.tgz
tar -zxvf flink-1.11.1-bin-scala_2.12.tgz
mv flink-1.11.1 /opt/servers/

将安装包同步到所有节点:

scp -r /opt/servers/flink-1.11.1 h122.wzk.icu:/opt/servers/
scp -r /opt/servers/flink-1.11.1 h123.wzk.icu:/opt/servers/

Standalone 模式配置

修改 Flink 配置文件:

# jobmanager.rpc.address 配置 JobManager 地址
jobmanager.rpc.address: h121.wzk.icu

# 配置 TaskManager 的 Slot 数量
taskmanager.numberOfTaskSlots: 2

workers 文件

配置 TaskManager 节点列表:

cd /opt/servers/flink-1.11.1/conf
vim workers

写入以下内容:

h121.wzk.icu
h122.wzk.icu
h123.wzk.icu

masters 文件

配置 JobManager 节点:

vim masters

写入以下内容:

h121.wzk.icu:8081

启动集群

完成配置后,启动 Flink 集群:

cd /opt/servers/flink-1.11.1/bin/
./start-cluster.sh

启动成功后,访问 Flink Web UI:

http://h121.wzk.icu:8081/#/overview

运行测试

Flink 提供了丰富的示例程序,可以通过以下命令运行 WordCount 示例:

cd /opt/servers/flink-1.11.1/bin
./flink run ../examples/streaming/WordCount.jar

示例程序会读取 wc.input 文件(如果存在),或者从参数指定的数据源读取数据,进行词频统计。

部署模式选择建议

根据实际业务需求选择合适的部署模式:

  • 学习开发:选择 Local 模式,快速上手
  • 中小规模生产:选择 Standalone 模式,部署简单
  • 大规模生产:选择 YARN 模式,资源利用率高

Standalone 模式适用于节点数量少于 10 台、资源固定且作业负载稳定的场景。对于需要频繁调整资源的生产环境,建议使用 YARN 或 Kubernetes 部署模式。