一、整体架构与模式概览
1.1 Flink 在 YARN 上是怎么跑的?
在 YARN 模式下:
- 我们把 Flink Job 提交给 YARN ResourceManager;
- ResourceManager 会在各个节点的 NodeManager 上拉起容器(container);
- Flink 的 JobManager 和 TaskManager 就运行在这些 container 中。
更重要的是,Flink 可以根据当前作业的 Slot 需求 动态申请 / 释放 TaskManager 资源,这让 YARN 集群资源利用率更高,也能让 Flink 作业更"弹性"。
1.2 两种常见运行模式
文章主要围绕两种模式展开:
-
Yarn Session Mode
- 先启动一个长期运行的 Flink Session 集群;
- 后续的 Flink / Flink CDC 作业都提交到这个已有的 Session 上;
- 适合频繁提交多个小作业、交互式开发和调试。
-
Yarn Application Mode
- 每个 Flink 作业以一个"独立应用"的形式跑在 Yarn 上;
- 作业提交时,自动拉起一个专用 Flink 集群,作业结束后可释放;
- 更推荐用于生产:资源隔离更好,生命周期清晰。
接下来就以 Flink CDC 同步 MySQL→Doris 的场景,带你跑通这两种模式。
二、环境准备:把基础打牢
2.1 准备一个可用的 YARN 集群
前提是你已经有一个可用的 YARN 环境,版本 >= 2.10.2 。
一般有三种典型来源:
- 云服务:如 Amazon EMR、Google Cloud DataProc;
- 商业发行版:如 Cloudera;
- 自建 Hadoop 集群(不建议新手一边搭 YARN 一边学 Flink CDC,容易双倍踩坑)。
验证 YARN 是否正常,可以简单执行:
bash
yarn top
如果没有报错,基本说明 YARN 集群工作正常。
2.2 安装与配置 Flink
-
从官网 下载一个较新的 Flink 二进制包,上传到某一节点并解压:
bashtar -xzf flink-*.tgz -
设置
FLINK_HOME环境变量,例如:bashexport FLINK_HOME=/path/flink-* -
Flink 运行环境要求为 类 UNIX 系统:Linux、Mac OS X,或者 Windows 下的 Cygwin。
2.3 配置 HADOOP_CLASSPATH(非常重要)
Flink 要在 YARN 上正常工作,必须能访问 Hadoop/YARN 的相关依赖,最简单的方式是依赖 hadoop classpath:
bash
export HADOOP_CLASSPATH=`hadoop classpath`
可以先 echo $HADOOP_CLASSPATH 看看是否已配置;如果是空的,就需要像上面这样手动设置。
三、部署 Flink CDC:目录结构与 Connector
从 Flink CDC 的发布页下载 tar 包,并解压:
bash
tar -xzf flink-cdc-*.tar.gz
解压后,flink-cdc 目录下通常有这几个子目录:
bin:脚本入口(例如flink-cdc.sh)lib:依赖 Jar,包括各种 source / sink connectorlog:日志目录conf:配置文件目录
然后需要:
- 到 Flink CDC release 页面,下载你需要的 connector JAR(比如 MySQL、Doris 等);
- 把这些 JAR 放到
flink-cdc/lib目录下。
注意:稳定版本才提供直接下载链接,SNAPSHOT 版本通常需要你自己从对应分支编译。
到这里,基础组件就就绪了,接下来开始实战。
四、Session Mode:先启动一个 YARN 上的 Flink 集群
4.1 启动 Flink YARN Session 集群
假设你已经在 Flink 发行版根目录,且 HADOOP_CLASSPATH 已配置好,可以直接执行:
bash
# 导出 HADOOP_CLASSPATH
export HADOOP_CLASSPATH=`hadoop classpath`
# 启动 YARN Session
./bin/yarn-session.sh --detached
--detached 表示以"后台方式"运行,不占当前终端。
当你需要停止这个 Session 时,可以通过 Application ID:
bash
echo "stop" | ./bin/yarn-session.sh -id application_XXXXX_XXX
这个
application_XXXXX_XXX来自启动 Session 时命令输出的 Application ID。
4.2 在 flink-conf.yaml 中绑定 Session
启动好 Session 后,可以通过 Flink 的 Web UI 或 YARN ResourceManager UI,查看 Flink JobManager 的 Web 地址 和 YARN Application ID。
在 flink-conf.yaml 里添加类似配置:
yaml
rest.bind-port: {{REST_PORT}}
rest.address: {{NODE_IP}}
execution.target: yarn-session
yarn.application.id: {{YARN_APPLICATION_ID}}
{``{REST_PORT}}:Flink JobManager Web UI 的端口;{``{NODE_IP}}:JobManager 所在节点的 IP;{``{YARN_APPLICATION_ID}}:刚才启动 Session 时的 YARN Application ID。
设置好之后,Flink CLI 就会把作业提交到这个指定的 YARN Session 集群。
五、实战:用 Flink CDC 同步 MySQL 全库到 Doris(Session 模式)
5.1 准备 Flink CDC Pipeline 配置
新建一个 mysql-to-doris.yaml,内容示例:
yaml
################################################################################
# Description: Sync MySQL all tables to Doris
################################################################################
source:
type: mysql
hostname: localhost
port: 3306
username: root
password: 123456
tables: app_db.\.*
server-id: 5400-5404
server-time-zone: UTC
sink:
type: doris
fenodes: 127.0.0.1:8030
username: root
password: ""
pipeline:
name: Sync MySQL Database to Doris
parallelism: 2
简单解释一下关键字段:
-
source 段
type: mysql:使用 MySQL CDC 作为数据源;tables: app_db.\.*:表示同步app_db库下的所有表;server-id: 5400-5404:MySQL Binlog 的 server-id 范围,避免与其他实例冲突;server-time-zone: UTC:指定 MySQL 服务器时区,避免时间字段错乱。
-
sink 段
type: doris:目标是 Doris;fenodes: 127.0.0.1:8030:Doris 的 FE 节点地址;username/password:Doris 账号信息。
-
pipeline 段
name:作业在 Flink/Web UI 中显示的名字;parallelism:作业的默认并行度。
你可以根据实际环境(MySQL/Doris 地址、账号、端口等)修改上述配置。
5.2 提交 Flink CDC 作业到 YARN Session
进入 flink-cdc 目录:
bash
cd /path/flink-cdc-*
./bin/flink-cdc.sh mysql-to-doris.yaml
如果提交成功,通常会看到类似输出:
text
Pipeline has been submitted to cluster.
Job ID: ae30f4580f1918bebf16752d4963dc54
Job Description: Sync MySQL Database to Doris
此时你可以:
- 在 Flink Web UI 中,看到一个名为
Sync MySQL Database to Doris的作业; - 在 YARN ResourceManager UI 中,看到对应的 Flink Session Application 和 TaskManager 容器。
到这里,基于 Session 模式的 MySQL → Doris 实时同步 Job 就已经跑起来了。
六、Yarn Application Mode:更推荐用于生产的方式
虽然 Session 模式很好用,但在多租户、多项目场景中,它的资源隔离和生命周期管理会略显"粗糙"。这时候,Yarn Application Mode 更合适。
6.1 Yarn Application Mode 的特点
与 Session 不同,Application Mode 的核心特点是:
-
每次提交作业时:
- YARN 会专门为这个作业启动一个 Flink 集群(JobManager + TaskManager);
- 作业结束后,这个集群可以被回收,资源让位给其它应用;
-
不需要单独维护一个"长期运行"的 Session 集群;
-
更适合集群资源紧张、作业之间需要较强隔离的生产场景。
6.2 提交 Flink CDC 作业(Yarn Application)
仍然在 flink-cdc 目录下,执行:
bash
cd /path/flink-cdc-*
./bin/flink-cdc.sh -t yarn-application -Dexecution.checkpointing.interval=2min mysql-to-doris.yaml
这里有几个关键点:
-t yarn-application:明确指定目标为 Yarn Application 集群;-Dexecution.checkpointing.interval=2min:通过 CLI 直接设置 Flink 配置项,这里是开启周期性 Checkpoint,间隔 2 分钟。
提交成功后,输出类似:
text
Pipeline has been submitted to cluster.
Job ID: application_1728995081590_1254
Job Description: submit job successful
你可以在 YARN Web UI 中看到一个 application_id = application_1728995081590_1254 的应用在运行。
6.3 从 Savepoint 恢复 Flink CDC 作业
在实际生产中,升级作业配置、发布新版本时,经常需要 从 Savepoint 恢复状态 。
Application Mode 中,同样可以轻松实现:
bash
cd /path/flink-cdc-*
./bin/flink-cdc.sh \
-t yarn-application \
-s hdfs:///flink/savepoint-1537 \
-Dexecution.checkpointing.interval=2min \
mysql-to-doris.yaml
-s hdfs:///flink/savepoint-1537:指定 Savepoint 路径;- 其他参数含义同上。
这样,新版本作业会从指定 Savepoint 恢复,保留上一次同步进度和状态,从而做到"无感平滑升级"。
七、如何观察与排错:Flink Web UI & YARN UI
不管是 Session 还是 Application 模式,排错和观测思路大同小异:
-
Flink Web UI
- Overview:看 TaskManager 数量、Slot 使用情况;
- Jobs:查看你的 Flink CDC Job 状态(RUNNING/FAILED/CANCELED);
- Task/Operator 级别的 Metrics、Backpressure、Checkpoint 状态等。
-
YARN ResourceManager UI
- Applications:确认 Application 是否在 RUNNING;
- Logs:查看 container 日志,特别是 JobManager / TaskManager 的 stdout/stderr;
- 资源使用:CPU、内存、Container 分配情况。
配合 flink-cdc/log 下的日志,一般可以快速定位绝大多数问题(比如 MySQL 连接失败、权限不足、Doris 导入报错等)。
八、总结与实践建议
最后,用几条要点来总结本文的实战路径:
-
先把基础环境跑通
- 确保 YARN 集群健康:
yarn top无异常; - 设置好
HADOOP_CLASSPATH和FLINK_HOME; - Flink / Flink CDC tar 包解压正确、目录结构清晰。
- 确保 YARN 集群健康:
-
Session Mode 更适合开发与调试
- 启动一次 Session,后续多次提交作业;
- 配置
flink-conf.yaml绑定到对应 Session; - MySQL→Doris 的 pipeline 配好后,可以快速迭代修改测试。
-
Yarn Application Mode 更适合生产
- 每个作业一个独立 Application,资源隔离好;
- 利用
-D参数配置 Checkpoint 等运行参数; - 配合 Savepoint,实现无感升级和回滚。
-
善用 Web UI 做观测与排错
- Flink Web UI 看作业和算子;
- YARN UI 看 Application 和容器;
- 日志与指标结合分析性能和稳定性问题。