在 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 和容器;
    • 日志与指标结合分析性能和稳定性问题。
相关推荐
AIGS0011 分钟前
向量空间JBoltAI:本体语义如何跨越企业AI的语义鸿沟
java·大数据·人工智能·人工智能ai大模型应用
熊猫钓鱼>_>28 分钟前
Electron:当 Web 技术统治桌面
大数据·前端·javascript·人工智能·架构·electron·agent
DMD16843 分钟前
AI海外外贸部:AI正在重新定义企业海外市场开发模式
大数据·人工智能·数字化转型·ai技术开发
拓向AI2 小时前
南京高性价比DeepSeek优化推广指南
大数据·人工智能
珠海西格电力3 小时前
零碳园区数据应用的具体场景有哪些?
大数据·人工智能·算法·架构·能源
Ganttable4 小时前
项目基线项目使用指南
大数据
阿乔外贸日记4 小时前
意大利进口主力产品及主要合作供应国
大数据·人工智能·物联网·搜索引擎·云计算
TTBIGDATA4 小时前
【Ambari Plus】15.Livy 安装
大数据·运维·hadoop·ambari·hdp·cdh·bigtop
YangYang9YangYan5 小时前
2026仓库文员学数据分析的价值
大数据
EMBA寰球网5 小时前
互动展厅设计核心逻辑、实施路径与落地实施要点专业解析:名瑞展览展陈行业实践深度洞察
大数据·人工智能