欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Flink Docker Application Mode 命令解析

Flink Docker Application Mode 命令解析

2025/4/30 7:39:50 来源:https://blog.csdn.net/m0_63628018/article/details/147555137  浏览:    关键词:Flink Docker Application Mode 命令解析

Flink官方提供的 Docker 运行 Flink Application Mode 模式,逐句解读含义,并且给予操作实例:

以下是 Flink 官方提供的 Docker 命令,用于在 Application Mode 下运行 Flink Job(standalone-job 作为 JobManager,taskmanager 作为 TaskManager)。

1. JobManager 启动命令解析

docker run \--mount type=bind,src=/host/path/to/job/artifacts1,target=/opt/flink/usrlib/artifacts1 \  # 挂载本地文件到容器--mount type=bind,src=/host/path/to/job/artifacts2,target=/opt/flink/usrlib/artifacts2 \  # 挂载第二个文件(如依赖包)--rm \  # 容器退出后自动删除--env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \  # 传递 Flink 配置--name=jobmanager \  # 容器名称--network flink-network \  # 使用 Docker 网络(需提前创建)flink:1.20.1-scala_2.12 standalone-job \  # 使用 Flink 镜像并启动 JobManager--job-classname com.job.ClassName \  # 指定主类[--job-id <job id>] \  # (可选)手动指定 Job ID[--fromSavepoint /path/to/savepoint [--allowNonRestoredState]] \  # (可选)从 Savepoint 恢复[job arguments]  # (可选)传递给 Job 的参数

2. TaskManager 启动命令解析

docker run \--mount type=bind,src=/host/path/to/job/artifacts1,target=/opt/flink/usrlib/artifacts1 \  # 挂载本地文件到容器--mount type=bind,src=/host/path/to/job/artifacts2,target=/opt/flink/usrlib/artifacts2 \  # 挂载第二个文件--env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \  # 传递 Flink 配置flink:1.20.1-scala_2.12 taskmanager  # 启动 TaskManager

操作实例(基于举例的需求)

1. 准备环境

  • JAR 路径/home/xxx/projects/paimon-flink/target/paimon-flink-1.0-SNAPSHOT.jar

  • 主类com.dev.flink_nc_demo1

  • Flink 镜像flink:1.20.1-java11(需替换 scala_2.12 版本)

  • Docker 网络: 确保 flink-network 已创建(若没有,运行 docker network create flink-network

2. 启动 JobManager

docker run \--mount type=bind,src=/home/xxx/projects/paimon-flink/target/paimon-flink-1.0-SNAPSHOT.jar,target=/opt/flink/usrlib/paimon-flink.jar \  # 挂载 JAR--rm \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \  # 直接指定 FLINK_PROPERTIES--name=jobmanager \--network flink-network \flink:1.20.1-java11 standalone-job \  # 使用 Java 11 镜像--job-classname com.dev.flink_nc_demo1  # 指定主类

说明

  • 由于你的 JAR 是单个文件,直接挂载到 /opt/flink/usrlib/ 下(Flink 默认加载该目录下的 JAR)。

  • FLINK_PROPERTIES 直接写死,避免依赖 Shell 变量。

3. 启动 TaskManager

docker run \--mount type=bind,src=/home/xxx/projects/paimon-flink/target/paimon-flink-1.0-SNAPSHOT.jar,target=/opt/flink/usrlib/paimon-flink.jar \  # 挂载相同 JAR--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \  # 必须与 JobManager 一致--network flink-network \  # 使用相同网络flink:1.20.1-java11 taskmanager

说明

  • TaskManager 需要访问 JobManager,因此 FLINK_PROPERTIES 必须包含 jobmanager.rpc.address: jobmanager(指向 JobManager 容器名)。

关键注意事项

  1. Docker 网络

    • JobManager 和 TaskManager 必须使用同一个网络(flink-network)。

    • 如果未创建,先运行:

      docker network create flink-network
  2. JAR 挂载

    • 如果 JAR 有额外依赖(如配置文件、Lib 目录),需额外挂载到 /opt/flink/usrlib/

  3. 日志查看

    • 查看 JobManager 日志:

      docker logs jobmanager
    • 查看 TaskManager 日志(需替换容器 ID):

      docker logs <taskmanager-container-id>
  4. 调试建议

    • 如果 Job 启动失败,可以进入容器检查文件是否挂载成功:

      docker exec -it jobmanager bash
      ls /opt/flink/usrlib/  # 确认 JAR 存在

完整示例(一键运行)

# 创建网络(如果尚未创建)
docker network create flink-network# 启动 JobManager
docker run \--mount type=bind,src=/home/xxx/projects/paimon-flink/target/paimon-flink-1.0-SNAPSHOT.jar,target=/opt/flink/usrlib/paimon-flink.jar \--rm \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \--name=jobmanager \--network flink-network \flink:1.20.1-java11 standalone-job \--job-classname com.dev.flink_nc_demo1# 启动 TaskManager(另开终端)
docker run \--mount type=bind,src=/home/xxx/projects/paimon-flink/target/paimon-flink-1.0-SNAPSHOT.jar,target=/opt/flink/usrlib/paimon-flink.jar \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \--network flink-network \flink:1.20.1-java11 taskmanager

这样, Flink Job 就会在 Docker 集群中以 Application Mode 运行!如果有问题,可以检查日志或调整挂载路径。

备注:

1、启动standalone是启动的job-manager,task-manager的启动需要另开终端。

2、log会打印在挂起的task-manager控制台,或者通过容器查看log

docker logs 28f9c444a3e8

3、由于

Flink Application cluster is a dedicated cluster which runs a single job. In this case, you deploy the cluster with the job as one step, thus, there is no extra job submission needed.

 所以运行该job的是standalone-job 模式(Application Mode)不会出现8081webui,该flink集群仅可以运行这一个job,不再接受提交其他任务。

  • ❌ 默认情况下不会暴露 Web UI,因为 standalone-job 是一个 一次性执行的 Job,任务完成后容器会退出(尤其是加了 --rm 参数时)。

  • 如果想启用 Web UI,需要:

    1. 使用 jobmanager 角色(而非 standalone-job,这样 Flink 会以常驻服务运行。

    2. 显式映射 8081 端口(通过 -p 8081:8081)。

4、任务完成,standalone-job启动的jobmanager自动退出,taskmanger需要手动ctrl c退出

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词