在 YARN 上跑 Flink CDC从 Session 到 Yarn Application 的完整实践

一、整体架构与模式概览

在 YARN 模式下:

  • 我们把 Flink Job 提交给 YARN ResourceManager
  • ResourceManager 会在各个节点的 NodeManager 上拉起容器(container);
  • Flink 的 JobManager 和 TaskManager 就运行在这些 container 中。

更重要的是,Flink 可以根据当前作业的 Slot 需求 动态申请 / 释放 TaskManager 资源,这让 YARN 集群资源利用率更高,也能让 Flink 作业更"弹性"。

1.2 两种常见运行模式

文章主要围绕两种模式展开:

  1. Yarn Session Mode

    • 先启动一个长期运行的 Flink Session 集群
    • 后续的 Flink / Flink CDC 作业都提交到这个已有的 Session 上;
    • 适合频繁提交多个小作业、交互式开发和调试。
  2. 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 集群工作正常。

  1. 从官网 下载一个较新的 Flink 二进制包,上传到某一节点并解压:

    bash 复制代码
    tar -xzf flink-*.tgz
  2. 设置 FLINK_HOME 环境变量,例如:

    bash 复制代码
    export FLINK_HOME=/path/flink-*
  3. 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 的发布页下载 tar 包,并解压:

bash 复制代码
tar -xzf flink-cdc-*.tar.gz

解压后,flink-cdc 目录下通常有这几个子目录:

  • bin:脚本入口(例如 flink-cdc.sh
  • lib:依赖 Jar,包括各种 source / sink connector
  • log:日志目录
  • conf:配置文件目录

然后需要:

  1. 到 Flink CDC release 页面,下载你需要的 connector JAR(比如 MySQL、Doris 等);
  2. 把这些 JAR 放到 flink-cdc/lib 目录下。

注意:稳定版本才提供直接下载链接,SNAPSHOT 版本通常需要你自己从对应分支编译。

到这里,基础组件就就绪了,接下来开始实战。

假设你已经在 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。

启动好 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 集群。

新建一个 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 地址、账号、端口等)修改上述配置。

进入 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 集群;

  • 更适合集群资源紧张、作业之间需要较强隔离的生产场景。

仍然在 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 的应用在运行。

在实际生产中,升级作业配置、发布新版本时,经常需要 从 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 恢复,保留上一次同步进度和状态,从而做到"无感平滑升级"。

不管是 Session 还是 Application 模式,排错和观测思路大同小异:

  1. Flink Web UI

    • Overview:看 TaskManager 数量、Slot 使用情况;
    • Jobs:查看你的 Flink CDC Job 状态(RUNNING/FAILED/CANCELED);
    • Task/Operator 级别的 Metrics、Backpressure、Checkpoint 状态等。
  2. YARN ResourceManager UI

    • Applications:确认 Application 是否在 RUNNING;
    • Logs:查看 container 日志,特别是 JobManager / TaskManager 的 stdout/stderr;
    • 资源使用:CPU、内存、Container 分配情况。

配合 flink-cdc/log 下的日志,一般可以快速定位绝大多数问题(比如 MySQL 连接失败、权限不足、Doris 导入报错等)。

八、总结与实践建议

最后,用几条要点来总结本文的实战路径:

  1. 先把基础环境跑通

    • 确保 YARN 集群健康:yarn top 无异常;
    • 设置好 HADOOP_CLASSPATHFLINK_HOME
    • Flink / Flink CDC tar 包解压正确、目录结构清晰。
  2. Session Mode 更适合开发与调试

    • 启动一次 Session,后续多次提交作业;
    • 配置 flink-conf.yaml 绑定到对应 Session;
    • MySQL→Doris 的 pipeline 配好后,可以快速迭代修改测试。
  3. Yarn Application Mode 更适合生产

    • 每个作业一个独立 Application,资源隔离好;
    • 利用 -D 参数配置 Checkpoint 等运行参数;
    • 配合 Savepoint,实现无感升级和回滚。
  4. 善用 Web UI 做观测与排错

    • Flink Web UI 看作业和算子;
    • YARN UI 看 Application 和容器;
    • 日志与指标结合分析性能和稳定性问题。
相关推荐
Learn Beyond Limits1 小时前
Data Preprocessing|数据预处理
大数据·人工智能·python·ai·数据挖掘·数据处理
放学有种别跑、2 小时前
GIT使用指南
大数据·linux·git·elasticsearch
gAlAxy...3 小时前
SpringMVC 响应数据和结果视图:从环境搭建到实战全解析
大数据·数据库·mysql
ganqiuye3 小时前
向ffmpeg官方源码仓库提交patch
大数据·ffmpeg·video-codec
越努力越幸运5084 小时前
git工具的学习
大数据·elasticsearch·搜索引擎
不会写程序的未来程序员4 小时前
详细的 Git 操作分步指南
大数据·git·elasticsearch
Kiri霧4 小时前
Scala 循环控制:掌握 while 和 for 循环
大数据·开发语言·scala
pale_moonlight4 小时前
九、Spark基础环境实战((上)虚拟机安装Scala与windows端安装Scala)
大数据·分布式·spark
武子康4 小时前
大数据-167 ELK Elastic Stack(ELK) 实战:架构要点、索引与排错清单
大数据·后端·elasticsearch